From 7b2cf94ad637c8c264499d3d59cc28a316552a2d Mon Sep 17 00:00:00 2001 From: roberto Date: Thu, 22 Aug 2024 10:13:16 +0200 Subject: [PATCH] Initial commit --- .gitignore | 5 + assets/efs.go | 8 + assets/emails/example.tmpl | 24 + assets/emails/forgotten-password.tmpl | 29 + .../jstemplates/items/field-text.handlebars | 4 + assets/jstemplates/items/field-url.handlebars | 4 + ...00001_initalize_schema_migrations.down.sql | 1 + .../000001_initalize_schema_migrations.up.sql | 1 + .../000002_create_users_table.down.sql | 1 + .../000002_create_users_table.up.sql | 6 + ...0003_create_password_resets_table.down.sql | 4 + ...000003_create_password_resets_table.up.sql | 7 + .../000004_create_bm_category_table.down.sql | 1 + .../000004_create_bm_category_table.up.sql | 7 + .../000005_create_bm_item_table.down.sql | 1 + .../000005_create_bm_item_table.up.sql | 17 + ...00006_create_bm_item_fields_table.down.sql | 1 + .../000006_create_bm_item_fields_table.up.sql | 6 + ...007_create_bm_item_keywords_table.down.sql | 1 + ...00007_create_bm_item_keywords_table.up.sql | 4 + ...08_create_bm_item_relations_table.down.sql | 1 + ...0008_create_bm_item_relations_table.up.sql | 8 + ...009_create_bm_item_notebook_table.down.sql | 1 + ...00009_create_bm_item_notebook_table.up.sql | 7 + .../000010_create_bm_quicknote_table.down.sql | 1 + .../000010_create_bm_quicknote_table.up.sql | 6 + .../000011_create_bm_type_table.down.sql | 1 + .../000011_create_bm_type_table.up.sql | 11 + ...00012_create_bm_type_fields_table.down.sql | 1 + .../000012_create_bm_type_fields_table.up.sql | 13 + .../000013_create_bm_widgets_table.down.sql | 1 + .../000013_create_bm_widgets_table.up.sql | 6 + ...00014_create_bm_item_shares_table.down.sql | 1 + .../000014_create_bm_item_shares_table.up.sql | 10 + .../static/bootstrap-icons/0-circle-fill.svg | 4 + assets/static/bootstrap-icons/0-circle.svg | 4 + .../static/bootstrap-icons/0-square-fill.svg | 4 + assets/static/bootstrap-icons/0-square.svg | 4 + .../static/bootstrap-icons/1-circle-fill.svg | 3 + assets/static/bootstrap-icons/1-circle.svg | 3 + .../static/bootstrap-icons/1-square-fill.svg | 3 + assets/static/bootstrap-icons/1-square.svg | 4 + assets/static/bootstrap-icons/123.svg | 3 + .../static/bootstrap-icons/2-circle-fill.svg | 3 + assets/static/bootstrap-icons/2-circle.svg | 3 + .../static/bootstrap-icons/2-square-fill.svg | 3 + assets/static/bootstrap-icons/2-square.svg | 4 + .../static/bootstrap-icons/3-circle-fill.svg | 3 + assets/static/bootstrap-icons/3-circle.svg | 4 + .../static/bootstrap-icons/3-square-fill.svg | 3 + assets/static/bootstrap-icons/3-square.svg | 4 + .../static/bootstrap-icons/4-circle-fill.svg | 3 + assets/static/bootstrap-icons/4-circle.svg | 4 + .../static/bootstrap-icons/4-square-fill.svg | 4 + assets/static/bootstrap-icons/4-square.svg | 4 + .../static/bootstrap-icons/5-circle-fill.svg | 3 + assets/static/bootstrap-icons/5-circle.svg | 3 + .../static/bootstrap-icons/5-square-fill.svg | 3 + assets/static/bootstrap-icons/5-square.svg | 4 + .../static/bootstrap-icons/6-circle-fill.svg | 3 + assets/static/bootstrap-icons/6-circle.svg | 3 + .../static/bootstrap-icons/6-square-fill.svg | 4 + assets/static/bootstrap-icons/6-square.svg | 4 + .../static/bootstrap-icons/7-circle-fill.svg | 3 + assets/static/bootstrap-icons/7-circle.svg | 3 + .../static/bootstrap-icons/7-square-fill.svg | 3 + assets/static/bootstrap-icons/7-square.svg | 4 + .../static/bootstrap-icons/8-circle-fill.svg | 3 + assets/static/bootstrap-icons/8-circle.svg | 3 + .../static/bootstrap-icons/8-square-fill.svg | 4 + assets/static/bootstrap-icons/8-square.svg | 4 + .../static/bootstrap-icons/9-circle-fill.svg | 3 + assets/static/bootstrap-icons/9-circle.svg | 3 + .../static/bootstrap-icons/9-square-fill.svg | 4 + assets/static/bootstrap-icons/9-square.svg | 4 + assets/static/bootstrap-icons/activity.svg | 3 + .../bootstrap-icons/airplane-engines-fill.svg | 3 + .../bootstrap-icons/airplane-engines.svg | 3 + .../static/bootstrap-icons/airplane-fill.svg | 3 + assets/static/bootstrap-icons/airplane.svg | 3 + assets/static/bootstrap-icons/alarm-fill.svg | 3 + assets/static/bootstrap-icons/alarm.svg | 4 + assets/static/bootstrap-icons/alexa.svg | 3 + .../static/bootstrap-icons/align-bottom.svg | 4 + .../static/bootstrap-icons/align-center.svg | 3 + assets/static/bootstrap-icons/align-end.svg | 4 + .../static/bootstrap-icons/align-middle.svg | 3 + assets/static/bootstrap-icons/align-start.svg | 4 + assets/static/bootstrap-icons/align-top.svg | 4 + assets/static/bootstrap-icons/alipay.svg | 4 + .../bootstrap-icons/alphabet-uppercase.svg | 3 + assets/static/bootstrap-icons/alphabet.svg | 3 + assets/static/bootstrap-icons/alt.svg | 3 + assets/static/bootstrap-icons/amazon.svg | 4 + assets/static/bootstrap-icons/amd.svg | 3 + assets/static/bootstrap-icons/android.svg | 3 + assets/static/bootstrap-icons/android2.svg | 3 + .../static/bootstrap-icons/app-indicator.svg | 4 + assets/static/bootstrap-icons/app.svg | 3 + assets/static/bootstrap-icons/apple.svg | 4 + .../static/bootstrap-icons/archive-fill.svg | 3 + assets/static/bootstrap-icons/archive.svg | 3 + .../bootstrap-icons/arrow-90deg-down.svg | 3 + .../bootstrap-icons/arrow-90deg-left.svg | 3 + .../bootstrap-icons/arrow-90deg-right.svg | 3 + .../static/bootstrap-icons/arrow-90deg-up.svg | 3 + .../static/bootstrap-icons/arrow-bar-down.svg | 3 + .../static/bootstrap-icons/arrow-bar-left.svg | 3 + .../bootstrap-icons/arrow-bar-right.svg | 3 + .../static/bootstrap-icons/arrow-bar-up.svg | 3 + .../bootstrap-icons/arrow-clockwise.svg | 4 + .../arrow-counterclockwise.svg | 4 + .../arrow-down-circle-fill.svg | 3 + .../bootstrap-icons/arrow-down-circle.svg | 3 + .../arrow-down-left-circle-fill.svg | 3 + .../arrow-down-left-circle.svg | 3 + .../arrow-down-left-square-fill.svg | 3 + .../arrow-down-left-square.svg | 3 + .../bootstrap-icons/arrow-down-left.svg | 3 + .../arrow-down-right-circle-fill.svg | 3 + .../arrow-down-right-circle.svg | 3 + .../arrow-down-right-square-fill.svg | 3 + .../arrow-down-right-square.svg | 3 + .../bootstrap-icons/arrow-down-right.svg | 3 + .../bootstrap-icons/arrow-down-short.svg | 3 + .../arrow-down-square-fill.svg | 3 + .../bootstrap-icons/arrow-down-square.svg | 3 + .../static/bootstrap-icons/arrow-down-up.svg | 3 + assets/static/bootstrap-icons/arrow-down.svg | 3 + .../arrow-left-circle-fill.svg | 3 + .../bootstrap-icons/arrow-left-circle.svg | 3 + .../bootstrap-icons/arrow-left-right.svg | 3 + .../bootstrap-icons/arrow-left-short.svg | 3 + .../arrow-left-square-fill.svg | 3 + .../bootstrap-icons/arrow-left-square.svg | 3 + assets/static/bootstrap-icons/arrow-left.svg | 3 + .../static/bootstrap-icons/arrow-repeat.svg | 4 + .../bootstrap-icons/arrow-return-left.svg | 3 + .../bootstrap-icons/arrow-return-right.svg | 3 + .../arrow-right-circle-fill.svg | 3 + .../bootstrap-icons/arrow-right-circle.svg | 3 + .../bootstrap-icons/arrow-right-short.svg | 3 + .../arrow-right-square-fill.svg | 3 + .../bootstrap-icons/arrow-right-square.svg | 3 + assets/static/bootstrap-icons/arrow-right.svg | 3 + .../arrow-through-heart-fill.svg | 3 + .../bootstrap-icons/arrow-through-heart.svg | 3 + .../bootstrap-icons/arrow-up-circle-fill.svg | 3 + .../bootstrap-icons/arrow-up-circle.svg | 3 + .../arrow-up-left-circle-fill.svg | 3 + .../bootstrap-icons/arrow-up-left-circle.svg | 3 + .../arrow-up-left-square-fill.svg | 3 + .../bootstrap-icons/arrow-up-left-square.svg | 3 + .../static/bootstrap-icons/arrow-up-left.svg | 3 + .../arrow-up-right-circle-fill.svg | 3 + .../bootstrap-icons/arrow-up-right-circle.svg | 3 + .../arrow-up-right-square-fill.svg | 3 + .../bootstrap-icons/arrow-up-right-square.svg | 3 + .../static/bootstrap-icons/arrow-up-right.svg | 3 + .../static/bootstrap-icons/arrow-up-short.svg | 3 + .../bootstrap-icons/arrow-up-square-fill.svg | 3 + .../bootstrap-icons/arrow-up-square.svg | 3 + assets/static/bootstrap-icons/arrow-up.svg | 3 + .../bootstrap-icons/arrows-angle-contract.svg | 3 + .../bootstrap-icons/arrows-angle-expand.svg | 3 + .../arrows-collapse-vertical.svg | 3 + .../bootstrap-icons/arrows-collapse.svg | 3 + .../arrows-expand-vertical.svg | 3 + .../static/bootstrap-icons/arrows-expand.svg | 3 + .../bootstrap-icons/arrows-fullscreen.svg | 3 + assets/static/bootstrap-icons/arrows-move.svg | 3 + .../bootstrap-icons/arrows-vertical.svg | 3 + assets/static/bootstrap-icons/arrows.svg | 3 + .../bootstrap-icons/aspect-ratio-fill.svg | 3 + .../static/bootstrap-icons/aspect-ratio.svg | 4 + assets/static/bootstrap-icons/asterisk.svg | 3 + assets/static/bootstrap-icons/at.svg | 3 + assets/static/bootstrap-icons/award-fill.svg | 4 + assets/static/bootstrap-icons/award.svg | 4 + assets/static/bootstrap-icons/back.svg | 3 + .../static/bootstrap-icons/backpack-fill.svg | 4 + assets/static/bootstrap-icons/backpack.svg | 4 + .../static/bootstrap-icons/backpack2-fill.svg | 4 + assets/static/bootstrap-icons/backpack2.svg | 5 + .../static/bootstrap-icons/backpack3-fill.svg | 4 + assets/static/bootstrap-icons/backpack3.svg | 4 + .../static/bootstrap-icons/backpack4-fill.svg | 4 + assets/static/bootstrap-icons/backpack4.svg | 4 + .../static/bootstrap-icons/backspace-fill.svg | 3 + .../backspace-reverse-fill.svg | 3 + .../bootstrap-icons/backspace-reverse.svg | 4 + assets/static/bootstrap-icons/backspace.svg | 4 + .../static/bootstrap-icons/badge-3d-fill.svg | 4 + assets/static/bootstrap-icons/badge-3d.svg | 4 + .../static/bootstrap-icons/badge-4k-fill.svg | 4 + assets/static/bootstrap-icons/badge-4k.svg | 4 + .../static/bootstrap-icons/badge-8k-fill.svg | 4 + assets/static/bootstrap-icons/badge-8k.svg | 4 + .../static/bootstrap-icons/badge-ad-fill.svg | 4 + assets/static/bootstrap-icons/badge-ad.svg | 4 + .../static/bootstrap-icons/badge-ar-fill.svg | 4 + assets/static/bootstrap-icons/badge-ar.svg | 4 + .../static/bootstrap-icons/badge-cc-fill.svg | 3 + assets/static/bootstrap-icons/badge-cc.svg | 4 + .../static/bootstrap-icons/badge-hd-fill.svg | 4 + assets/static/bootstrap-icons/badge-hd.svg | 4 + .../static/bootstrap-icons/badge-sd-fill.svg | 4 + assets/static/bootstrap-icons/badge-sd.svg | 3 + .../static/bootstrap-icons/badge-tm-fill.svg | 3 + assets/static/bootstrap-icons/badge-tm.svg | 4 + .../static/bootstrap-icons/badge-vo-fill.svg | 4 + assets/static/bootstrap-icons/badge-vo.svg | 4 + .../static/bootstrap-icons/badge-vr-fill.svg | 4 + assets/static/bootstrap-icons/badge-vr.svg | 4 + .../static/bootstrap-icons/badge-wc-fill.svg | 3 + assets/static/bootstrap-icons/badge-wc.svg | 4 + .../static/bootstrap-icons/bag-check-fill.svg | 3 + assets/static/bootstrap-icons/bag-check.svg | 4 + .../static/bootstrap-icons/bag-dash-fill.svg | 3 + assets/static/bootstrap-icons/bag-dash.svg | 4 + assets/static/bootstrap-icons/bag-fill.svg | 3 + .../static/bootstrap-icons/bag-heart-fill.svg | 3 + assets/static/bootstrap-icons/bag-heart.svg | 3 + .../static/bootstrap-icons/bag-plus-fill.svg | 3 + assets/static/bootstrap-icons/bag-plus.svg | 4 + assets/static/bootstrap-icons/bag-x-fill.svg | 3 + assets/static/bootstrap-icons/bag-x.svg | 4 + assets/static/bootstrap-icons/bag.svg | 3 + .../static/bootstrap-icons/balloon-fill.svg | 3 + .../bootstrap-icons/balloon-heart-fill.svg | 3 + .../static/bootstrap-icons/balloon-heart.svg | 3 + assets/static/bootstrap-icons/balloon.svg | 3 + assets/static/bootstrap-icons/ban-fill.svg | 3 + assets/static/bootstrap-icons/ban.svg | 3 + .../static/bootstrap-icons/bandaid-fill.svg | 3 + assets/static/bootstrap-icons/bandaid.svg | 4 + assets/static/bootstrap-icons/bank.svg | 3 + assets/static/bootstrap-icons/bank2.svg | 3 + .../static/bootstrap-icons/bar-chart-fill.svg | 3 + .../bootstrap-icons/bar-chart-line-fill.svg | 3 + .../static/bootstrap-icons/bar-chart-line.svg | 3 + .../bootstrap-icons/bar-chart-steps.svg | 3 + assets/static/bootstrap-icons/bar-chart.svg | 3 + assets/static/bootstrap-icons/basket-fill.svg | 3 + assets/static/bootstrap-icons/basket.svg | 3 + .../static/bootstrap-icons/basket2-fill.svg | 3 + assets/static/bootstrap-icons/basket2.svg | 4 + .../static/bootstrap-icons/basket3-fill.svg | 3 + assets/static/bootstrap-icons/basket3.svg | 3 + .../bootstrap-icons/battery-charging.svg | 6 + .../static/bootstrap-icons/battery-full.svg | 4 + .../static/bootstrap-icons/battery-half.svg | 4 + assets/static/bootstrap-icons/battery.svg | 3 + assets/static/bootstrap-icons/behance.svg | 3 + assets/static/bootstrap-icons/bell-fill.svg | 3 + .../bootstrap-icons/bell-slash-fill.svg | 3 + assets/static/bootstrap-icons/bell-slash.svg | 3 + assets/static/bootstrap-icons/bell.svg | 3 + assets/static/bootstrap-icons/bezier.svg | 4 + assets/static/bootstrap-icons/bezier2.svg | 3 + assets/static/bootstrap-icons/bicycle.svg | 3 + assets/static/bootstrap-icons/bing.svg | 5 + .../bootstrap-icons/binoculars-fill.svg | 3 + assets/static/bootstrap-icons/binoculars.svg | 3 + .../bootstrap-icons/blockquote-left.svg | 3 + .../bootstrap-icons/blockquote-right.svg | 3 + assets/static/bootstrap-icons/bluetooth.svg | 3 + assets/static/bootstrap-icons/body-text.svg | 3 + assets/static/bootstrap-icons/book-fill.svg | 3 + assets/static/bootstrap-icons/book-half.svg | 3 + assets/static/bootstrap-icons/book.svg | 3 + .../bootstrap-icons/bookmark-check-fill.svg | 3 + .../static/bootstrap-icons/bookmark-check.svg | 4 + .../bootstrap-icons/bookmark-dash-fill.svg | 3 + .../static/bootstrap-icons/bookmark-dash.svg | 4 + .../static/bootstrap-icons/bookmark-fill.svg | 3 + .../bootstrap-icons/bookmark-heart-fill.svg | 3 + .../static/bootstrap-icons/bookmark-heart.svg | 4 + .../bootstrap-icons/bookmark-plus-fill.svg | 3 + .../static/bootstrap-icons/bookmark-plus.svg | 4 + .../bootstrap-icons/bookmark-star-fill.svg | 3 + .../static/bootstrap-icons/bookmark-star.svg | 4 + .../bootstrap-icons/bookmark-x-fill.svg | 3 + assets/static/bootstrap-icons/bookmark-x.svg | 4 + assets/static/bootstrap-icons/bookmark.svg | 3 + .../static/bootstrap-icons/bookmarks-fill.svg | 4 + assets/static/bootstrap-icons/bookmarks.svg | 4 + assets/static/bootstrap-icons/bookshelf.svg | 3 + .../static/bootstrap-icons/boombox-fill.svg | 4 + assets/static/bootstrap-icons/boombox.svg | 6 + .../static/bootstrap-icons/bootstrap-fill.svg | 4 + .../bootstrap-icons/bootstrap-icons.svg | 1 + .../bootstrap-icons/bootstrap-reboot.svg | 4 + assets/static/bootstrap-icons/bootstrap.svg | 4 + assets/static/bootstrap-icons/border-all.svg | 3 + .../static/bootstrap-icons/border-bottom.svg | 3 + .../static/bootstrap-icons/border-center.svg | 3 + .../static/bootstrap-icons/border-inner.svg | 5 + assets/static/bootstrap-icons/border-left.svg | 3 + .../static/bootstrap-icons/border-middle.svg | 3 + .../static/bootstrap-icons/border-outer.svg | 4 + .../static/bootstrap-icons/border-right.svg | 3 + .../static/bootstrap-icons/border-style.svg | 3 + assets/static/bootstrap-icons/border-top.svg | 3 + .../static/bootstrap-icons/border-width.svg | 3 + assets/static/bootstrap-icons/border.svg | 3 + .../bootstrap-icons/bounding-box-circles.svg | 3 + .../static/bootstrap-icons/bounding-box.svg | 3 + .../bootstrap-icons/box-arrow-down-left.svg | 4 + .../bootstrap-icons/box-arrow-down-right.svg | 4 + .../static/bootstrap-icons/box-arrow-down.svg | 4 + .../box-arrow-in-down-left.svg | 4 + .../box-arrow-in-down-right.svg | 4 + .../bootstrap-icons/box-arrow-in-down.svg | 4 + .../bootstrap-icons/box-arrow-in-left.svg | 4 + .../bootstrap-icons/box-arrow-in-right.svg | 4 + .../bootstrap-icons/box-arrow-in-up-left.svg | 4 + .../bootstrap-icons/box-arrow-in-up-right.svg | 4 + .../bootstrap-icons/box-arrow-in-up.svg | 4 + .../static/bootstrap-icons/box-arrow-left.svg | 4 + .../bootstrap-icons/box-arrow-right.svg | 4 + .../bootstrap-icons/box-arrow-up-left.svg | 4 + .../bootstrap-icons/box-arrow-up-right.svg | 4 + .../static/bootstrap-icons/box-arrow-up.svg | 4 + assets/static/bootstrap-icons/box-fill.svg | 3 + .../static/bootstrap-icons/box-seam-fill.svg | 3 + assets/static/bootstrap-icons/box-seam.svg | 3 + assets/static/bootstrap-icons/box.svg | 3 + assets/static/bootstrap-icons/box2-fill.svg | 3 + .../bootstrap-icons/box2-heart-fill.svg | 3 + assets/static/bootstrap-icons/box2-heart.svg | 4 + assets/static/bootstrap-icons/box2.svg | 3 + assets/static/bootstrap-icons/boxes.svg | 3 + .../bootstrap-icons/braces-asterisk.svg | 3 + assets/static/bootstrap-icons/braces.svg | 3 + assets/static/bootstrap-icons/bricks.svg | 3 + .../static/bootstrap-icons/briefcase-fill.svg | 4 + assets/static/bootstrap-icons/briefcase.svg | 3 + .../brightness-alt-high-fill.svg | 3 + .../bootstrap-icons/brightness-alt-high.svg | 3 + .../brightness-alt-low-fill.svg | 3 + .../bootstrap-icons/brightness-alt-low.svg | 3 + .../bootstrap-icons/brightness-high-fill.svg | 3 + .../bootstrap-icons/brightness-high.svg | 3 + .../bootstrap-icons/brightness-low-fill.svg | 3 + .../static/bootstrap-icons/brightness-low.svg | 3 + assets/static/bootstrap-icons/brilliance.svg | 3 + .../static/bootstrap-icons/broadcast-pin.svg | 3 + assets/static/bootstrap-icons/broadcast.svg | 3 + .../static/bootstrap-icons/browser-chrome.svg | 3 + .../static/bootstrap-icons/browser-edge.svg | 5 + .../bootstrap-icons/browser-firefox.svg | 3 + .../static/bootstrap-icons/browser-safari.svg | 3 + assets/static/bootstrap-icons/brush-fill.svg | 3 + assets/static/bootstrap-icons/brush.svg | 3 + assets/static/bootstrap-icons/bucket-fill.svg | 3 + assets/static/bootstrap-icons/bucket.svg | 3 + assets/static/bootstrap-icons/bug-fill.svg | 4 + assets/static/bootstrap-icons/bug.svg | 3 + .../static/bootstrap-icons/building-add.svg | 5 + .../static/bootstrap-icons/building-check.svg | 5 + .../static/bootstrap-icons/building-dash.svg | 5 + .../static/bootstrap-icons/building-down.svg | 5 + .../bootstrap-icons/building-exclamation.svg | 4 + .../bootstrap-icons/building-fill-add.svg | 4 + .../bootstrap-icons/building-fill-check.svg | 4 + .../bootstrap-icons/building-fill-dash.svg | 4 + .../bootstrap-icons/building-fill-down.svg | 4 + .../building-fill-exclamation.svg | 4 + .../bootstrap-icons/building-fill-gear.svg | 4 + .../bootstrap-icons/building-fill-lock.svg | 4 + .../bootstrap-icons/building-fill-slash.svg | 4 + .../bootstrap-icons/building-fill-up.svg | 4 + .../bootstrap-icons/building-fill-x.svg | 4 + .../static/bootstrap-icons/building-fill.svg | 3 + .../static/bootstrap-icons/building-gear.svg | 4 + .../static/bootstrap-icons/building-lock.svg | 4 + .../static/bootstrap-icons/building-slash.svg | 5 + assets/static/bootstrap-icons/building-up.svg | 5 + assets/static/bootstrap-icons/building-x.svg | 4 + assets/static/bootstrap-icons/building.svg | 4 + .../static/bootstrap-icons/buildings-fill.svg | 3 + assets/static/bootstrap-icons/buildings.svg | 4 + assets/static/bootstrap-icons/bullseye.svg | 6 + .../static/bootstrap-icons/bus-front-fill.svg | 3 + assets/static/bootstrap-icons/bus-front.svg | 4 + .../static/bootstrap-icons/c-circle-fill.svg | 3 + assets/static/bootstrap-icons/c-circle.svg | 3 + .../static/bootstrap-icons/c-square-fill.svg | 3 + assets/static/bootstrap-icons/c-square.svg | 4 + assets/static/bootstrap-icons/cake-fill.svg | 3 + assets/static/bootstrap-icons/cake.svg | 3 + assets/static/bootstrap-icons/cake2-fill.svg | 4 + assets/static/bootstrap-icons/cake2.svg | 3 + .../bootstrap-icons/calculator-fill.svg | 3 + assets/static/bootstrap-icons/calculator.svg | 4 + .../bootstrap-icons/calendar-check-fill.svg | 3 + .../static/bootstrap-icons/calendar-check.svg | 4 + .../bootstrap-icons/calendar-date-fill.svg | 4 + .../static/bootstrap-icons/calendar-date.svg | 4 + .../bootstrap-icons/calendar-day-fill.svg | 3 + .../static/bootstrap-icons/calendar-day.svg | 4 + .../bootstrap-icons/calendar-event-fill.svg | 3 + .../static/bootstrap-icons/calendar-event.svg | 4 + .../static/bootstrap-icons/calendar-fill.svg | 3 + .../bootstrap-icons/calendar-heart-fill.svg | 3 + .../static/bootstrap-icons/calendar-heart.svg | 3 + .../bootstrap-icons/calendar-minus-fill.svg | 3 + .../static/bootstrap-icons/calendar-minus.svg | 4 + .../bootstrap-icons/calendar-month-fill.svg | 4 + .../static/bootstrap-icons/calendar-month.svg | 4 + .../bootstrap-icons/calendar-plus-fill.svg | 3 + .../static/bootstrap-icons/calendar-plus.svg | 4 + .../bootstrap-icons/calendar-range-fill.svg | 3 + .../static/bootstrap-icons/calendar-range.svg | 4 + .../bootstrap-icons/calendar-week-fill.svg | 3 + .../static/bootstrap-icons/calendar-week.svg | 4 + .../bootstrap-icons/calendar-x-fill.svg | 3 + assets/static/bootstrap-icons/calendar-x.svg | 4 + assets/static/bootstrap-icons/calendar.svg | 3 + .../bootstrap-icons/calendar2-check-fill.svg | 3 + .../bootstrap-icons/calendar2-check.svg | 5 + .../bootstrap-icons/calendar2-date-fill.svg | 4 + .../static/bootstrap-icons/calendar2-date.svg | 5 + .../bootstrap-icons/calendar2-day-fill.svg | 3 + .../static/bootstrap-icons/calendar2-day.svg | 5 + .../bootstrap-icons/calendar2-event-fill.svg | 3 + .../bootstrap-icons/calendar2-event.svg | 5 + .../static/bootstrap-icons/calendar2-fill.svg | 3 + .../bootstrap-icons/calendar2-heart-fill.svg | 3 + .../bootstrap-icons/calendar2-heart.svg | 3 + .../bootstrap-icons/calendar2-minus-fill.svg | 3 + .../bootstrap-icons/calendar2-minus.svg | 5 + .../bootstrap-icons/calendar2-month-fill.svg | 4 + .../bootstrap-icons/calendar2-month.svg | 5 + .../bootstrap-icons/calendar2-plus-fill.svg | 3 + .../static/bootstrap-icons/calendar2-plus.svg | 4 + .../bootstrap-icons/calendar2-range-fill.svg | 3 + .../bootstrap-icons/calendar2-range.svg | 4 + .../bootstrap-icons/calendar2-week-fill.svg | 3 + .../static/bootstrap-icons/calendar2-week.svg | 4 + .../bootstrap-icons/calendar2-x-fill.svg | 3 + assets/static/bootstrap-icons/calendar2-x.svg | 5 + assets/static/bootstrap-icons/calendar2.svg | 4 + .../bootstrap-icons/calendar3-event-fill.svg | 3 + .../bootstrap-icons/calendar3-event.svg | 4 + .../static/bootstrap-icons/calendar3-fill.svg | 3 + .../bootstrap-icons/calendar3-range-fill.svg | 3 + .../bootstrap-icons/calendar3-range.svg | 4 + .../bootstrap-icons/calendar3-week-fill.svg | 3 + .../static/bootstrap-icons/calendar3-week.svg | 4 + assets/static/bootstrap-icons/calendar3.svg | 4 + .../bootstrap-icons/calendar4-event.svg | 4 + .../bootstrap-icons/calendar4-range.svg | 4 + .../static/bootstrap-icons/calendar4-week.svg | 4 + assets/static/bootstrap-icons/calendar4.svg | 3 + assets/static/bootstrap-icons/camera-fill.svg | 4 + .../bootstrap-icons/camera-reels-fill.svg | 5 + .../static/bootstrap-icons/camera-reels.svg | 5 + .../bootstrap-icons/camera-video-fill.svg | 3 + .../bootstrap-icons/camera-video-off-fill.svg | 3 + .../bootstrap-icons/camera-video-off.svg | 3 + .../static/bootstrap-icons/camera-video.svg | 3 + assets/static/bootstrap-icons/camera.svg | 4 + assets/static/bootstrap-icons/camera2.svg | 4 + .../static/bootstrap-icons/capslock-fill.svg | 3 + assets/static/bootstrap-icons/capslock.svg | 3 + .../static/bootstrap-icons/capsule-pill.svg | 3 + assets/static/bootstrap-icons/capsule.svg | 3 + .../static/bootstrap-icons/car-front-fill.svg | 3 + assets/static/bootstrap-icons/car-front.svg | 4 + .../static/bootstrap-icons/card-checklist.svg | 4 + .../static/bootstrap-icons/card-heading.svg | 4 + assets/static/bootstrap-icons/card-image.svg | 4 + assets/static/bootstrap-icons/card-list.svg | 4 + assets/static/bootstrap-icons/card-text.svg | 4 + .../bootstrap-icons/caret-down-fill.svg | 3 + .../caret-down-square-fill.svg | 3 + .../bootstrap-icons/caret-down-square.svg | 4 + assets/static/bootstrap-icons/caret-down.svg | 3 + .../bootstrap-icons/caret-left-fill.svg | 3 + .../caret-left-square-fill.svg | 3 + .../bootstrap-icons/caret-left-square.svg | 4 + assets/static/bootstrap-icons/caret-left.svg | 3 + .../bootstrap-icons/caret-right-fill.svg | 3 + .../caret-right-square-fill.svg | 3 + .../bootstrap-icons/caret-right-square.svg | 4 + assets/static/bootstrap-icons/caret-right.svg | 3 + .../static/bootstrap-icons/caret-up-fill.svg | 3 + .../bootstrap-icons/caret-up-square-fill.svg | 3 + .../bootstrap-icons/caret-up-square.svg | 4 + assets/static/bootstrap-icons/caret-up.svg | 3 + .../bootstrap-icons/cart-check-fill.svg | 3 + assets/static/bootstrap-icons/cart-check.svg | 4 + .../static/bootstrap-icons/cart-dash-fill.svg | 3 + assets/static/bootstrap-icons/cart-dash.svg | 4 + assets/static/bootstrap-icons/cart-fill.svg | 3 + .../static/bootstrap-icons/cart-plus-fill.svg | 3 + assets/static/bootstrap-icons/cart-plus.svg | 4 + assets/static/bootstrap-icons/cart-x-fill.svg | 3 + assets/static/bootstrap-icons/cart-x.svg | 4 + assets/static/bootstrap-icons/cart.svg | 3 + assets/static/bootstrap-icons/cart2.svg | 3 + assets/static/bootstrap-icons/cart3.svg | 3 + assets/static/bootstrap-icons/cart4.svg | 3 + assets/static/bootstrap-icons/cash-coin.svg | 6 + assets/static/bootstrap-icons/cash-stack.svg | 4 + assets/static/bootstrap-icons/cash.svg | 4 + .../static/bootstrap-icons/cassette-fill.svg | 4 + assets/static/bootstrap-icons/cassette.svg | 4 + assets/static/bootstrap-icons/cast.svg | 4 + .../static/bootstrap-icons/cc-circle-fill.svg | 3 + assets/static/bootstrap-icons/cc-circle.svg | 3 + .../static/bootstrap-icons/cc-square-fill.svg | 3 + assets/static/bootstrap-icons/cc-square.svg | 4 + .../static/bootstrap-icons/chat-dots-fill.svg | 3 + assets/static/bootstrap-icons/chat-dots.svg | 4 + assets/static/bootstrap-icons/chat-fill.svg | 3 + .../bootstrap-icons/chat-heart-fill.svg | 3 + assets/static/bootstrap-icons/chat-heart.svg | 3 + .../bootstrap-icons/chat-left-dots-fill.svg | 3 + .../static/bootstrap-icons/chat-left-dots.svg | 4 + .../static/bootstrap-icons/chat-left-fill.svg | 3 + .../bootstrap-icons/chat-left-heart-fill.svg | 3 + .../bootstrap-icons/chat-left-heart.svg | 4 + .../bootstrap-icons/chat-left-quote-fill.svg | 3 + .../bootstrap-icons/chat-left-quote.svg | 4 + .../bootstrap-icons/chat-left-text-fill.svg | 3 + .../static/bootstrap-icons/chat-left-text.svg | 4 + assets/static/bootstrap-icons/chat-left.svg | 3 + .../bootstrap-icons/chat-quote-fill.svg | 3 + assets/static/bootstrap-icons/chat-quote.svg | 4 + .../bootstrap-icons/chat-right-dots-fill.svg | 3 + .../bootstrap-icons/chat-right-dots.svg | 4 + .../bootstrap-icons/chat-right-fill.svg | 3 + .../bootstrap-icons/chat-right-heart-fill.svg | 3 + .../bootstrap-icons/chat-right-heart.svg | 4 + .../bootstrap-icons/chat-right-quote-fill.svg | 3 + .../bootstrap-icons/chat-right-quote.svg | 4 + .../bootstrap-icons/chat-right-text-fill.svg | 3 + .../bootstrap-icons/chat-right-text.svg | 4 + assets/static/bootstrap-icons/chat-right.svg | 3 + .../bootstrap-icons/chat-square-dots-fill.svg | 3 + .../bootstrap-icons/chat-square-dots.svg | 4 + .../bootstrap-icons/chat-square-fill.svg | 3 + .../chat-square-heart-fill.svg | 3 + .../bootstrap-icons/chat-square-heart.svg | 4 + .../chat-square-quote-fill.svg | 3 + .../bootstrap-icons/chat-square-quote.svg | 4 + .../bootstrap-icons/chat-square-text-fill.svg | 3 + .../bootstrap-icons/chat-square-text.svg | 4 + assets/static/bootstrap-icons/chat-square.svg | 3 + .../static/bootstrap-icons/chat-text-fill.svg | 3 + assets/static/bootstrap-icons/chat-text.svg | 4 + assets/static/bootstrap-icons/chat.svg | 3 + assets/static/bootstrap-icons/check-all.svg | 3 + .../bootstrap-icons/check-circle-fill.svg | 3 + .../static/bootstrap-icons/check-circle.svg | 4 + assets/static/bootstrap-icons/check-lg.svg | 3 + .../bootstrap-icons/check-square-fill.svg | 3 + .../static/bootstrap-icons/check-square.svg | 4 + assets/static/bootstrap-icons/check.svg | 3 + assets/static/bootstrap-icons/check2-all.svg | 4 + .../static/bootstrap-icons/check2-circle.svg | 4 + .../static/bootstrap-icons/check2-square.svg | 4 + assets/static/bootstrap-icons/check2.svg | 3 + .../bootstrap-icons/chevron-bar-contract.svg | 3 + .../bootstrap-icons/chevron-bar-down.svg | 3 + .../bootstrap-icons/chevron-bar-expand.svg | 3 + .../bootstrap-icons/chevron-bar-left.svg | 3 + .../bootstrap-icons/chevron-bar-right.svg | 3 + .../static/bootstrap-icons/chevron-bar-up.svg | 3 + .../bootstrap-icons/chevron-compact-down.svg | 3 + .../bootstrap-icons/chevron-compact-left.svg | 3 + .../bootstrap-icons/chevron-compact-right.svg | 3 + .../bootstrap-icons/chevron-compact-up.svg | 3 + .../bootstrap-icons/chevron-contract.svg | 3 + .../bootstrap-icons/chevron-double-down.svg | 4 + .../bootstrap-icons/chevron-double-left.svg | 4 + .../bootstrap-icons/chevron-double-right.svg | 4 + .../bootstrap-icons/chevron-double-up.svg | 4 + .../static/bootstrap-icons/chevron-down.svg | 3 + .../static/bootstrap-icons/chevron-expand.svg | 3 + .../static/bootstrap-icons/chevron-left.svg | 3 + .../static/bootstrap-icons/chevron-right.svg | 3 + assets/static/bootstrap-icons/chevron-up.svg | 3 + assets/static/bootstrap-icons/circle-fill.svg | 3 + assets/static/bootstrap-icons/circle-half.svg | 3 + .../static/bootstrap-icons/circle-square.svg | 4 + assets/static/bootstrap-icons/circle.svg | 3 + .../bootstrap-icons/clipboard-check-fill.svg | 4 + .../bootstrap-icons/clipboard-check.svg | 5 + .../bootstrap-icons/clipboard-data-fill.svg | 4 + .../static/bootstrap-icons/clipboard-data.svg | 5 + .../static/bootstrap-icons/clipboard-fill.svg | 3 + .../bootstrap-icons/clipboard-heart-fill.svg | 4 + .../bootstrap-icons/clipboard-heart.svg | 5 + .../bootstrap-icons/clipboard-minus-fill.svg | 4 + .../bootstrap-icons/clipboard-minus.svg | 5 + .../bootstrap-icons/clipboard-plus-fill.svg | 4 + .../static/bootstrap-icons/clipboard-plus.svg | 5 + .../bootstrap-icons/clipboard-pulse.svg | 3 + .../bootstrap-icons/clipboard-x-fill.svg | 4 + assets/static/bootstrap-icons/clipboard-x.svg | 5 + assets/static/bootstrap-icons/clipboard.svg | 4 + .../bootstrap-icons/clipboard2-check-fill.svg | 4 + .../bootstrap-icons/clipboard2-check.svg | 5 + .../bootstrap-icons/clipboard2-data-fill.svg | 4 + .../bootstrap-icons/clipboard2-data.svg | 5 + .../bootstrap-icons/clipboard2-fill.svg | 4 + .../bootstrap-icons/clipboard2-heart-fill.svg | 4 + .../bootstrap-icons/clipboard2-heart.svg | 5 + .../bootstrap-icons/clipboard2-minus-fill.svg | 4 + .../bootstrap-icons/clipboard2-minus.svg | 5 + .../bootstrap-icons/clipboard2-plus-fill.svg | 4 + .../bootstrap-icons/clipboard2-plus.svg | 5 + .../bootstrap-icons/clipboard2-pulse-fill.svg | 4 + .../bootstrap-icons/clipboard2-pulse.svg | 5 + .../bootstrap-icons/clipboard2-x-fill.svg | 4 + .../static/bootstrap-icons/clipboard2-x.svg | 5 + assets/static/bootstrap-icons/clipboard2.svg | 4 + assets/static/bootstrap-icons/clock-fill.svg | 3 + .../static/bootstrap-icons/clock-history.svg | 5 + assets/static/bootstrap-icons/clock.svg | 4 + .../bootstrap-icons/cloud-arrow-down-fill.svg | 3 + .../bootstrap-icons/cloud-arrow-down.svg | 4 + .../bootstrap-icons/cloud-arrow-up-fill.svg | 3 + .../static/bootstrap-icons/cloud-arrow-up.svg | 4 + .../bootstrap-icons/cloud-check-fill.svg | 3 + assets/static/bootstrap-icons/cloud-check.svg | 4 + .../bootstrap-icons/cloud-download-fill.svg | 3 + .../static/bootstrap-icons/cloud-download.svg | 4 + .../bootstrap-icons/cloud-drizzle-fill.svg | 3 + .../static/bootstrap-icons/cloud-drizzle.svg | 3 + assets/static/bootstrap-icons/cloud-fill.svg | 3 + .../static/bootstrap-icons/cloud-fog-fill.svg | 3 + assets/static/bootstrap-icons/cloud-fog.svg | 3 + .../bootstrap-icons/cloud-fog2-fill.svg | 3 + assets/static/bootstrap-icons/cloud-fog2.svg | 3 + .../bootstrap-icons/cloud-hail-fill.svg | 3 + assets/static/bootstrap-icons/cloud-hail.svg | 3 + .../bootstrap-icons/cloud-haze-fill.svg | 3 + assets/static/bootstrap-icons/cloud-haze.svg | 3 + .../bootstrap-icons/cloud-haze2-fill.svg | 3 + assets/static/bootstrap-icons/cloud-haze2.svg | 3 + .../bootstrap-icons/cloud-lightning-fill.svg | 3 + .../cloud-lightning-rain-fill.svg | 3 + .../bootstrap-icons/cloud-lightning-rain.svg | 3 + .../bootstrap-icons/cloud-lightning.svg | 3 + .../bootstrap-icons/cloud-minus-fill.svg | 3 + assets/static/bootstrap-icons/cloud-minus.svg | 4 + .../bootstrap-icons/cloud-moon-fill.svg | 4 + assets/static/bootstrap-icons/cloud-moon.svg | 4 + .../bootstrap-icons/cloud-plus-fill.svg | 3 + assets/static/bootstrap-icons/cloud-plus.svg | 4 + .../bootstrap-icons/cloud-rain-fill.svg | 3 + .../bootstrap-icons/cloud-rain-heavy-fill.svg | 3 + .../bootstrap-icons/cloud-rain-heavy.svg | 3 + assets/static/bootstrap-icons/cloud-rain.svg | 3 + .../bootstrap-icons/cloud-slash-fill.svg | 3 + assets/static/bootstrap-icons/cloud-slash.svg | 4 + .../bootstrap-icons/cloud-sleet-fill.svg | 3 + assets/static/bootstrap-icons/cloud-sleet.svg | 3 + .../bootstrap-icons/cloud-snow-fill.svg | 3 + assets/static/bootstrap-icons/cloud-snow.svg | 3 + .../static/bootstrap-icons/cloud-sun-fill.svg | 4 + assets/static/bootstrap-icons/cloud-sun.svg | 4 + .../bootstrap-icons/cloud-upload-fill.svg | 3 + .../static/bootstrap-icons/cloud-upload.svg | 4 + assets/static/bootstrap-icons/cloud.svg | 3 + assets/static/bootstrap-icons/clouds-fill.svg | 4 + assets/static/bootstrap-icons/clouds.svg | 4 + assets/static/bootstrap-icons/cloudy-fill.svg | 3 + assets/static/bootstrap-icons/cloudy.svg | 3 + assets/static/bootstrap-icons/code-slash.svg | 3 + assets/static/bootstrap-icons/code-square.svg | 4 + assets/static/bootstrap-icons/code.svg | 3 + assets/static/bootstrap-icons/coin.svg | 5 + .../bootstrap-icons/collection-fill.svg | 3 + .../bootstrap-icons/collection-play-fill.svg | 3 + .../bootstrap-icons/collection-play.svg | 4 + assets/static/bootstrap-icons/collection.svg | 3 + assets/static/bootstrap-icons/columns-gap.svg | 3 + assets/static/bootstrap-icons/columns.svg | 3 + assets/static/bootstrap-icons/command.svg | 3 + .../static/bootstrap-icons/compass-fill.svg | 3 + assets/static/bootstrap-icons/compass.svg | 4 + .../static/bootstrap-icons/cone-striped.svg | 3 + assets/static/bootstrap-icons/cone.svg | 3 + assets/static/bootstrap-icons/controller.svg | 4 + assets/static/bootstrap-icons/cookie.svg | 4 + assets/static/bootstrap-icons/copy.svg | 3 + assets/static/bootstrap-icons/cpu-fill.svg | 4 + assets/static/bootstrap-icons/cpu.svg | 3 + .../credit-card-2-back-fill.svg | 3 + .../bootstrap-icons/credit-card-2-back.svg | 4 + .../credit-card-2-front-fill.svg | 3 + .../bootstrap-icons/credit-card-2-front.svg | 4 + .../bootstrap-icons/credit-card-fill.svg | 3 + assets/static/bootstrap-icons/credit-card.svg | 4 + assets/static/bootstrap-icons/crop.svg | 3 + assets/static/bootstrap-icons/crosshair.svg | 3 + assets/static/bootstrap-icons/crosshair2.svg | 3 + assets/static/bootstrap-icons/cup-fill.svg | 3 + .../static/bootstrap-icons/cup-hot-fill.svg | 4 + assets/static/bootstrap-icons/cup-hot.svg | 4 + assets/static/bootstrap-icons/cup-straw.svg | 3 + assets/static/bootstrap-icons/cup.svg | 3 + .../bootstrap-icons/currency-bitcoin.svg | 3 + .../bootstrap-icons/currency-dollar.svg | 3 + .../static/bootstrap-icons/currency-euro.svg | 3 + .../bootstrap-icons/currency-exchange.svg | 3 + .../static/bootstrap-icons/currency-pound.svg | 3 + .../static/bootstrap-icons/currency-rupee.svg | 3 + .../static/bootstrap-icons/currency-yen.svg | 3 + assets/static/bootstrap-icons/cursor-fill.svg | 3 + assets/static/bootstrap-icons/cursor-text.svg | 3 + assets/static/bootstrap-icons/cursor.svg | 3 + .../bootstrap-icons/dash-circle-dotted.svg | 3 + .../bootstrap-icons/dash-circle-fill.svg | 3 + assets/static/bootstrap-icons/dash-circle.svg | 4 + assets/static/bootstrap-icons/dash-lg.svg | 3 + .../bootstrap-icons/dash-square-dotted.svg | 3 + .../bootstrap-icons/dash-square-fill.svg | 3 + assets/static/bootstrap-icons/dash-square.svg | 4 + assets/static/bootstrap-icons/dash.svg | 3 + .../static/bootstrap-icons/database-add.svg | 4 + .../static/bootstrap-icons/database-check.svg | 4 + .../static/bootstrap-icons/database-dash.svg | 4 + .../static/bootstrap-icons/database-down.svg | 4 + .../bootstrap-icons/database-exclamation.svg | 4 + .../bootstrap-icons/database-fill-add.svg | 4 + .../bootstrap-icons/database-fill-check.svg | 4 + .../bootstrap-icons/database-fill-dash.svg | 4 + .../bootstrap-icons/database-fill-down.svg | 4 + .../database-fill-exclamation.svg | 5 + .../bootstrap-icons/database-fill-gear.svg | 4 + .../bootstrap-icons/database-fill-lock.svg | 5 + .../bootstrap-icons/database-fill-slash.svg | 4 + .../bootstrap-icons/database-fill-up.svg | 4 + .../bootstrap-icons/database-fill-x.svg | 5 + .../static/bootstrap-icons/database-fill.svg | 6 + .../static/bootstrap-icons/database-gear.svg | 4 + .../static/bootstrap-icons/database-lock.svg | 4 + .../static/bootstrap-icons/database-slash.svg | 4 + assets/static/bootstrap-icons/database-up.svg | 4 + assets/static/bootstrap-icons/database-x.svg | 4 + assets/static/bootstrap-icons/database.svg | 3 + .../bootstrap-icons/device-hdd-fill.svg | 4 + assets/static/bootstrap-icons/device-hdd.svg | 5 + .../bootstrap-icons/device-ssd-fill.svg | 4 + assets/static/bootstrap-icons/device-ssd.svg | 4 + .../static/bootstrap-icons/diagram-2-fill.svg | 3 + assets/static/bootstrap-icons/diagram-2.svg | 3 + .../static/bootstrap-icons/diagram-3-fill.svg | 3 + assets/static/bootstrap-icons/diagram-3.svg | 3 + .../static/bootstrap-icons/diamond-fill.svg | 3 + .../static/bootstrap-icons/diamond-half.svg | 3 + assets/static/bootstrap-icons/diamond.svg | 3 + assets/static/bootstrap-icons/dice-1-fill.svg | 3 + assets/static/bootstrap-icons/dice-1.svg | 4 + assets/static/bootstrap-icons/dice-2-fill.svg | 3 + assets/static/bootstrap-icons/dice-2.svg | 4 + assets/static/bootstrap-icons/dice-3-fill.svg | 3 + assets/static/bootstrap-icons/dice-3.svg | 4 + assets/static/bootstrap-icons/dice-4-fill.svg | 3 + assets/static/bootstrap-icons/dice-4.svg | 4 + assets/static/bootstrap-icons/dice-5-fill.svg | 3 + assets/static/bootstrap-icons/dice-5.svg | 4 + assets/static/bootstrap-icons/dice-6-fill.svg | 3 + assets/static/bootstrap-icons/dice-6.svg | 4 + assets/static/bootstrap-icons/disc-fill.svg | 3 + assets/static/bootstrap-icons/disc.svg | 4 + assets/static/bootstrap-icons/discord.svg | 3 + .../static/bootstrap-icons/display-fill.svg | 3 + assets/static/bootstrap-icons/display.svg | 3 + .../bootstrap-icons/displayport-fill.svg | 3 + assets/static/bootstrap-icons/displayport.svg | 4 + .../bootstrap-icons/distribute-horizontal.svg | 4 + .../bootstrap-icons/distribute-vertical.svg | 4 + .../bootstrap-icons/door-closed-fill.svg | 3 + assets/static/bootstrap-icons/door-closed.svg | 4 + .../static/bootstrap-icons/door-open-fill.svg | 3 + assets/static/bootstrap-icons/door-open.svg | 4 + assets/static/bootstrap-icons/dot.svg | 3 + assets/static/bootstrap-icons/download.svg | 4 + assets/static/bootstrap-icons/dpad-fill.svg | 3 + assets/static/bootstrap-icons/dpad.svg | 4 + assets/static/bootstrap-icons/dribbble.svg | 3 + assets/static/bootstrap-icons/dropbox.svg | 3 + .../static/bootstrap-icons/droplet-fill.svg | 3 + .../static/bootstrap-icons/droplet-half.svg | 4 + assets/static/bootstrap-icons/droplet.svg | 4 + assets/static/bootstrap-icons/duffle-fill.svg | 3 + assets/static/bootstrap-icons/duffle.svg | 4 + assets/static/bootstrap-icons/ear-fill.svg | 3 + assets/static/bootstrap-icons/ear.svg | 3 + assets/static/bootstrap-icons/earbuds.svg | 3 + assets/static/bootstrap-icons/easel-fill.svg | 3 + assets/static/bootstrap-icons/easel.svg | 3 + assets/static/bootstrap-icons/easel2-fill.svg | 4 + assets/static/bootstrap-icons/easel2.svg | 3 + assets/static/bootstrap-icons/easel3-fill.svg | 3 + assets/static/bootstrap-icons/easel3.svg | 3 + assets/static/bootstrap-icons/egg-fill.svg | 3 + assets/static/bootstrap-icons/egg-fried.svg | 4 + assets/static/bootstrap-icons/egg.svg | 3 + assets/static/bootstrap-icons/eject-fill.svg | 3 + assets/static/bootstrap-icons/eject.svg | 3 + .../bootstrap-icons/emoji-angry-fill.svg | 3 + assets/static/bootstrap-icons/emoji-angry.svg | 4 + .../bootstrap-icons/emoji-astonished-fill.svg | 3 + .../bootstrap-icons/emoji-astonished.svg | 4 + .../bootstrap-icons/emoji-dizzy-fill.svg | 3 + assets/static/bootstrap-icons/emoji-dizzy.svg | 4 + .../emoji-expressionless-fill.svg | 3 + .../bootstrap-icons/emoji-expressionless.svg | 4 + .../bootstrap-icons/emoji-frown-fill.svg | 3 + assets/static/bootstrap-icons/emoji-frown.svg | 4 + .../bootstrap-icons/emoji-grimace-fill.svg | 3 + .../static/bootstrap-icons/emoji-grimace.svg | 4 + .../bootstrap-icons/emoji-grin-fill.svg | 3 + assets/static/bootstrap-icons/emoji-grin.svg | 4 + .../bootstrap-icons/emoji-heart-eyes-fill.svg | 3 + .../bootstrap-icons/emoji-heart-eyes.svg | 4 + .../bootstrap-icons/emoji-kiss-fill.svg | 3 + assets/static/bootstrap-icons/emoji-kiss.svg | 3 + .../bootstrap-icons/emoji-laughing-fill.svg | 3 + .../static/bootstrap-icons/emoji-laughing.svg | 4 + .../bootstrap-icons/emoji-neutral-fill.svg | 3 + .../static/bootstrap-icons/emoji-neutral.svg | 4 + .../bootstrap-icons/emoji-smile-fill.svg | 3 + .../emoji-smile-upside-down-fill.svg | 3 + .../emoji-smile-upside-down.svg | 4 + assets/static/bootstrap-icons/emoji-smile.svg | 4 + .../bootstrap-icons/emoji-sunglasses-fill.svg | 3 + .../bootstrap-icons/emoji-sunglasses.svg | 4 + .../bootstrap-icons/emoji-surprise-fill.svg | 3 + .../static/bootstrap-icons/emoji-surprise.svg | 4 + .../bootstrap-icons/emoji-tear-fill.svg | 3 + assets/static/bootstrap-icons/emoji-tear.svg | 4 + .../bootstrap-icons/emoji-wink-fill.svg | 3 + assets/static/bootstrap-icons/emoji-wink.svg | 4 + .../envelope-arrow-down-fill.svg | 4 + .../bootstrap-icons/envelope-arrow-down.svg | 4 + .../envelope-arrow-up-fill.svg | 4 + .../bootstrap-icons/envelope-arrow-up.svg | 4 + .../bootstrap-icons/envelope-at-fill.svg | 4 + assets/static/bootstrap-icons/envelope-at.svg | 4 + .../bootstrap-icons/envelope-check-fill.svg | 4 + .../static/bootstrap-icons/envelope-check.svg | 4 + .../bootstrap-icons/envelope-dash-fill.svg | 4 + .../static/bootstrap-icons/envelope-dash.svg | 4 + .../envelope-exclamation-fill.svg | 4 + .../bootstrap-icons/envelope-exclamation.svg | 4 + .../static/bootstrap-icons/envelope-fill.svg | 3 + .../bootstrap-icons/envelope-heart-fill.svg | 4 + .../static/bootstrap-icons/envelope-heart.svg | 3 + .../bootstrap-icons/envelope-open-fill.svg | 3 + .../envelope-open-heart-fill.svg | 4 + .../bootstrap-icons/envelope-open-heart.svg | 3 + .../static/bootstrap-icons/envelope-open.svg | 3 + .../bootstrap-icons/envelope-paper-fill.svg | 3 + .../envelope-paper-heart-fill.svg | 3 + .../bootstrap-icons/envelope-paper-heart.svg | 3 + .../static/bootstrap-icons/envelope-paper.svg | 3 + .../bootstrap-icons/envelope-plus-fill.svg | 4 + .../static/bootstrap-icons/envelope-plus.svg | 4 + .../bootstrap-icons/envelope-slash-fill.svg | 4 + .../static/bootstrap-icons/envelope-slash.svg | 4 + .../bootstrap-icons/envelope-x-fill.svg | 4 + assets/static/bootstrap-icons/envelope-x.svg | 4 + assets/static/bootstrap-icons/envelope.svg | 3 + assets/static/bootstrap-icons/eraser-fill.svg | 3 + assets/static/bootstrap-icons/eraser.svg | 3 + assets/static/bootstrap-icons/escape.svg | 4 + assets/static/bootstrap-icons/ethernet.svg | 4 + .../static/bootstrap-icons/ev-front-fill.svg | 3 + assets/static/bootstrap-icons/ev-front.svg | 4 + .../bootstrap-icons/ev-station-fill.svg | 3 + assets/static/bootstrap-icons/ev-station.svg | 4 + .../exclamation-circle-fill.svg | 3 + .../bootstrap-icons/exclamation-circle.svg | 4 + .../exclamation-diamond-fill.svg | 3 + .../bootstrap-icons/exclamation-diamond.svg | 4 + .../static/bootstrap-icons/exclamation-lg.svg | 3 + .../exclamation-octagon-fill.svg | 3 + .../bootstrap-icons/exclamation-octagon.svg | 4 + .../exclamation-square-fill.svg | 3 + .../bootstrap-icons/exclamation-square.svg | 4 + .../exclamation-triangle-fill.svg | 3 + .../bootstrap-icons/exclamation-triangle.svg | 4 + assets/static/bootstrap-icons/exclamation.svg | 3 + assets/static/bootstrap-icons/exclude.svg | 3 + .../static/bootstrap-icons/explicit-fill.svg | 3 + assets/static/bootstrap-icons/explicit.svg | 4 + assets/static/bootstrap-icons/exposure.svg | 4 + assets/static/bootstrap-icons/eye-fill.svg | 4 + .../static/bootstrap-icons/eye-slash-fill.svg | 4 + assets/static/bootstrap-icons/eye-slash.svg | 5 + assets/static/bootstrap-icons/eye.svg | 4 + assets/static/bootstrap-icons/eyedropper.svg | 3 + assets/static/bootstrap-icons/eyeglasses.svg | 3 + assets/static/bootstrap-icons/facebook.svg | 3 + assets/static/bootstrap-icons/fan.svg | 4 + .../bootstrap-icons/fast-forward-btn-fill.svg | 3 + .../bootstrap-icons/fast-forward-btn.svg | 4 + .../fast-forward-circle-fill.svg | 3 + .../bootstrap-icons/fast-forward-circle.svg | 4 + .../bootstrap-icons/fast-forward-fill.svg | 4 + .../static/bootstrap-icons/fast-forward.svg | 4 + assets/static/bootstrap-icons/feather.svg | 3 + assets/static/bootstrap-icons/feather2.svg | 3 + .../bootstrap-icons/file-arrow-down-fill.svg | 3 + .../bootstrap-icons/file-arrow-down.svg | 4 + .../bootstrap-icons/file-arrow-up-fill.svg | 3 + .../static/bootstrap-icons/file-arrow-up.svg | 4 + .../bootstrap-icons/file-bar-graph-fill.svg | 3 + .../static/bootstrap-icons/file-bar-graph.svg | 4 + .../bootstrap-icons/file-binary-fill.svg | 4 + assets/static/bootstrap-icons/file-binary.svg | 4 + .../bootstrap-icons/file-break-fill.svg | 3 + assets/static/bootstrap-icons/file-break.svg | 3 + .../bootstrap-icons/file-check-fill.svg | 3 + assets/static/bootstrap-icons/file-check.svg | 4 + .../static/bootstrap-icons/file-code-fill.svg | 3 + assets/static/bootstrap-icons/file-code.svg | 4 + .../static/bootstrap-icons/file-diff-fill.svg | 3 + assets/static/bootstrap-icons/file-diff.svg | 4 + .../file-earmark-arrow-down-fill.svg | 3 + .../file-earmark-arrow-down.svg | 4 + .../file-earmark-arrow-up-fill.svg | 3 + .../bootstrap-icons/file-earmark-arrow-up.svg | 4 + .../file-earmark-bar-graph-fill.svg | 3 + .../file-earmark-bar-graph.svg | 4 + .../file-earmark-binary-fill.svg | 4 + .../bootstrap-icons/file-earmark-binary.svg | 4 + .../file-earmark-break-fill.svg | 3 + .../bootstrap-icons/file-earmark-break.svg | 3 + .../file-earmark-check-fill.svg | 3 + .../bootstrap-icons/file-earmark-check.svg | 4 + .../file-earmark-code-fill.svg | 3 + .../bootstrap-icons/file-earmark-code.svg | 4 + .../file-earmark-diff-fill.svg | 3 + .../bootstrap-icons/file-earmark-diff.svg | 4 + .../file-earmark-easel-fill.svg | 4 + .../bootstrap-icons/file-earmark-easel.svg | 4 + .../file-earmark-excel-fill.svg | 3 + .../bootstrap-icons/file-earmark-excel.svg | 4 + .../bootstrap-icons/file-earmark-fill.svg | 3 + .../file-earmark-font-fill.svg | 3 + .../bootstrap-icons/file-earmark-font.svg | 4 + .../file-earmark-image-fill.svg | 4 + .../bootstrap-icons/file-earmark-image.svg | 4 + .../file-earmark-lock-fill.svg | 4 + .../bootstrap-icons/file-earmark-lock.svg | 4 + .../file-earmark-lock2-fill.svg | 4 + .../bootstrap-icons/file-earmark-lock2.svg | 4 + .../file-earmark-medical-fill.svg | 3 + .../bootstrap-icons/file-earmark-medical.svg | 4 + .../file-earmark-minus-fill.svg | 3 + .../bootstrap-icons/file-earmark-minus.svg | 4 + .../file-earmark-music-fill.svg | 3 + .../bootstrap-icons/file-earmark-music.svg | 4 + .../bootstrap-icons/file-earmark-pdf-fill.svg | 4 + .../bootstrap-icons/file-earmark-pdf.svg | 4 + .../file-earmark-person-fill.svg | 3 + .../bootstrap-icons/file-earmark-person.svg | 4 + .../file-earmark-play-fill.svg | 3 + .../bootstrap-icons/file-earmark-play.svg | 4 + .../file-earmark-plus-fill.svg | 3 + .../bootstrap-icons/file-earmark-plus.svg | 4 + .../file-earmark-post-fill.svg | 3 + .../bootstrap-icons/file-earmark-post.svg | 4 + .../bootstrap-icons/file-earmark-ppt-fill.svg | 4 + .../bootstrap-icons/file-earmark-ppt.svg | 4 + .../file-earmark-richtext-fill.svg | 3 + .../bootstrap-icons/file-earmark-richtext.svg | 4 + .../file-earmark-ruled-fill.svg | 3 + .../bootstrap-icons/file-earmark-ruled.svg | 3 + .../file-earmark-slides-fill.svg | 4 + .../bootstrap-icons/file-earmark-slides.svg | 4 + .../file-earmark-spreadsheet-fill.svg | 4 + .../file-earmark-spreadsheet.svg | 3 + .../file-earmark-text-fill.svg | 3 + .../bootstrap-icons/file-earmark-text.svg | 4 + .../file-earmark-word-fill.svg | 3 + .../bootstrap-icons/file-earmark-word.svg | 4 + .../bootstrap-icons/file-earmark-x-fill.svg | 3 + .../static/bootstrap-icons/file-earmark-x.svg | 4 + .../bootstrap-icons/file-earmark-zip-fill.svg | 4 + .../bootstrap-icons/file-earmark-zip.svg | 4 + .../static/bootstrap-icons/file-earmark.svg | 3 + .../bootstrap-icons/file-easel-fill.svg | 4 + assets/static/bootstrap-icons/file-easel.svg | 4 + .../bootstrap-icons/file-excel-fill.svg | 3 + assets/static/bootstrap-icons/file-excel.svg | 4 + assets/static/bootstrap-icons/file-fill.svg | 3 + .../static/bootstrap-icons/file-font-fill.svg | 3 + assets/static/bootstrap-icons/file-font.svg | 4 + .../bootstrap-icons/file-image-fill.svg | 4 + assets/static/bootstrap-icons/file-image.svg | 4 + .../static/bootstrap-icons/file-lock-fill.svg | 4 + assets/static/bootstrap-icons/file-lock.svg | 4 + .../bootstrap-icons/file-lock2-fill.svg | 4 + assets/static/bootstrap-icons/file-lock2.svg | 4 + .../bootstrap-icons/file-medical-fill.svg | 3 + .../static/bootstrap-icons/file-medical.svg | 4 + .../bootstrap-icons/file-minus-fill.svg | 3 + assets/static/bootstrap-icons/file-minus.svg | 4 + .../bootstrap-icons/file-music-fill.svg | 3 + assets/static/bootstrap-icons/file-music.svg | 4 + .../static/bootstrap-icons/file-pdf-fill.svg | 4 + assets/static/bootstrap-icons/file-pdf.svg | 4 + .../bootstrap-icons/file-person-fill.svg | 3 + assets/static/bootstrap-icons/file-person.svg | 4 + .../static/bootstrap-icons/file-play-fill.svg | 3 + assets/static/bootstrap-icons/file-play.svg | 4 + .../static/bootstrap-icons/file-plus-fill.svg | 3 + assets/static/bootstrap-icons/file-plus.svg | 4 + .../static/bootstrap-icons/file-post-fill.svg | 3 + assets/static/bootstrap-icons/file-post.svg | 4 + .../static/bootstrap-icons/file-ppt-fill.svg | 4 + assets/static/bootstrap-icons/file-ppt.svg | 4 + .../bootstrap-icons/file-richtext-fill.svg | 3 + .../static/bootstrap-icons/file-richtext.svg | 4 + .../bootstrap-icons/file-ruled-fill.svg | 3 + assets/static/bootstrap-icons/file-ruled.svg | 3 + .../bootstrap-icons/file-slides-fill.svg | 4 + assets/static/bootstrap-icons/file-slides.svg | 4 + .../bootstrap-icons/file-spreadsheet-fill.svg | 3 + .../bootstrap-icons/file-spreadsheet.svg | 3 + .../static/bootstrap-icons/file-text-fill.svg | 3 + assets/static/bootstrap-icons/file-text.svg | 4 + .../static/bootstrap-icons/file-word-fill.svg | 3 + assets/static/bootstrap-icons/file-word.svg | 4 + assets/static/bootstrap-icons/file-x-fill.svg | 3 + assets/static/bootstrap-icons/file-x.svg | 4 + .../static/bootstrap-icons/file-zip-fill.svg | 4 + assets/static/bootstrap-icons/file-zip.svg | 4 + assets/static/bootstrap-icons/file.svg | 3 + assets/static/bootstrap-icons/files-alt.svg | 3 + assets/static/bootstrap-icons/files.svg | 3 + .../static/bootstrap-icons/filetype-aac.svg | 3 + assets/static/bootstrap-icons/filetype-ai.svg | 3 + .../static/bootstrap-icons/filetype-bmp.svg | 3 + assets/static/bootstrap-icons/filetype-cs.svg | 3 + .../static/bootstrap-icons/filetype-css.svg | 3 + .../static/bootstrap-icons/filetype-csv.svg | 3 + .../static/bootstrap-icons/filetype-doc.svg | 3 + .../static/bootstrap-icons/filetype-docx.svg | 3 + .../static/bootstrap-icons/filetype-exe.svg | 3 + .../static/bootstrap-icons/filetype-gif.svg | 3 + .../static/bootstrap-icons/filetype-heic.svg | 3 + .../static/bootstrap-icons/filetype-html.svg | 3 + .../static/bootstrap-icons/filetype-java.svg | 3 + .../static/bootstrap-icons/filetype-jpg.svg | 3 + assets/static/bootstrap-icons/filetype-js.svg | 3 + .../static/bootstrap-icons/filetype-json.svg | 3 + .../static/bootstrap-icons/filetype-jsx.svg | 3 + .../static/bootstrap-icons/filetype-key.svg | 3 + .../static/bootstrap-icons/filetype-m4p.svg | 3 + assets/static/bootstrap-icons/filetype-md.svg | 3 + .../static/bootstrap-icons/filetype-mdx.svg | 3 + .../static/bootstrap-icons/filetype-mov.svg | 3 + .../static/bootstrap-icons/filetype-mp3.svg | 3 + .../static/bootstrap-icons/filetype-mp4.svg | 3 + .../static/bootstrap-icons/filetype-otf.svg | 3 + .../static/bootstrap-icons/filetype-pdf.svg | 3 + .../static/bootstrap-icons/filetype-php.svg | 3 + .../static/bootstrap-icons/filetype-png.svg | 3 + .../static/bootstrap-icons/filetype-ppt.svg | 3 + .../static/bootstrap-icons/filetype-pptx.svg | 3 + .../static/bootstrap-icons/filetype-psd.svg | 3 + assets/static/bootstrap-icons/filetype-py.svg | 3 + .../static/bootstrap-icons/filetype-raw.svg | 3 + assets/static/bootstrap-icons/filetype-rb.svg | 3 + .../static/bootstrap-icons/filetype-sass.svg | 3 + .../static/bootstrap-icons/filetype-scss.svg | 3 + assets/static/bootstrap-icons/filetype-sh.svg | 3 + .../static/bootstrap-icons/filetype-sql.svg | 3 + .../static/bootstrap-icons/filetype-svg.svg | 3 + .../static/bootstrap-icons/filetype-tiff.svg | 3 + .../static/bootstrap-icons/filetype-tsx.svg | 3 + .../static/bootstrap-icons/filetype-ttf.svg | 3 + .../static/bootstrap-icons/filetype-txt.svg | 3 + .../static/bootstrap-icons/filetype-wav.svg | 3 + .../static/bootstrap-icons/filetype-woff.svg | 3 + .../static/bootstrap-icons/filetype-xls.svg | 3 + .../static/bootstrap-icons/filetype-xlsx.svg | 3 + .../static/bootstrap-icons/filetype-xml.svg | 3 + .../static/bootstrap-icons/filetype-yml.svg | 3 + assets/static/bootstrap-icons/film.svg | 3 + .../bootstrap-icons/filter-circle-fill.svg | 3 + .../static/bootstrap-icons/filter-circle.svg | 4 + assets/static/bootstrap-icons/filter-left.svg | 3 + .../static/bootstrap-icons/filter-right.svg | 3 + .../bootstrap-icons/filter-square-fill.svg | 3 + .../static/bootstrap-icons/filter-square.svg | 4 + assets/static/bootstrap-icons/filter.svg | 3 + assets/static/bootstrap-icons/fingerprint.svg | 7 + assets/static/bootstrap-icons/fire.svg | 3 + assets/static/bootstrap-icons/flag-fill.svg | 3 + assets/static/bootstrap-icons/flag.svg | 3 + assets/static/bootstrap-icons/floppy-fill.svg | 4 + assets/static/bootstrap-icons/floppy.svg | 4 + .../static/bootstrap-icons/floppy2-fill.svg | 4 + assets/static/bootstrap-icons/floppy2.svg | 3 + assets/static/bootstrap-icons/flower1.svg | 3 + assets/static/bootstrap-icons/flower2.svg | 3 + assets/static/bootstrap-icons/flower3.svg | 3 + .../static/bootstrap-icons/folder-check.svg | 4 + assets/static/bootstrap-icons/folder-fill.svg | 3 + .../static/bootstrap-icons/folder-minus.svg | 4 + assets/static/bootstrap-icons/folder-plus.svg | 4 + .../bootstrap-icons/folder-symlink-fill.svg | 3 + .../static/bootstrap-icons/folder-symlink.svg | 4 + assets/static/bootstrap-icons/folder-x.svg | 4 + assets/static/bootstrap-icons/folder.svg | 3 + .../static/bootstrap-icons/folder2-open.svg | 3 + assets/static/bootstrap-icons/folder2.svg | 3 + .../bootstrap-icons/font/bootstrap-icons.css | 2078 ++++ .../bootstrap-icons/font/bootstrap-icons.json | 2052 ++++ .../font/bootstrap-icons.min.css | 5 + .../bootstrap-icons/font/bootstrap-icons.scss | 2090 ++++ .../font/fonts/bootstrap-icons.woff | Bin 0 -> 176032 bytes .../font/fonts/bootstrap-icons.woff2 | Bin 0 -> 130396 bytes assets/static/bootstrap-icons/fonts.svg | 3 + .../static/bootstrap-icons/forward-fill.svg | 3 + assets/static/bootstrap-icons/forward.svg | 3 + assets/static/bootstrap-icons/front.svg | 3 + .../bootstrap-icons/fuel-pump-diesel-fill.svg | 4 + .../bootstrap-icons/fuel-pump-diesel.svg | 4 + .../static/bootstrap-icons/fuel-pump-fill.svg | 3 + assets/static/bootstrap-icons/fuel-pump.svg | 4 + .../bootstrap-icons/fullscreen-exit.svg | 3 + assets/static/bootstrap-icons/fullscreen.svg | 3 + assets/static/bootstrap-icons/funnel-fill.svg | 3 + assets/static/bootstrap-icons/funnel.svg | 3 + assets/static/bootstrap-icons/gear-fill.svg | 3 + .../bootstrap-icons/gear-wide-connected.svg | 3 + assets/static/bootstrap-icons/gear-wide.svg | 3 + assets/static/bootstrap-icons/gear.svg | 4 + assets/static/bootstrap-icons/gem.svg | 3 + .../bootstrap-icons/gender-ambiguous.svg | 3 + .../static/bootstrap-icons/gender-female.svg | 3 + assets/static/bootstrap-icons/gender-male.svg | 3 + .../static/bootstrap-icons/gender-neuter.svg | 3 + .../static/bootstrap-icons/gender-trans.svg | 3 + .../static/bootstrap-icons/geo-alt-fill.svg | 3 + assets/static/bootstrap-icons/geo-alt.svg | 4 + assets/static/bootstrap-icons/geo-fill.svg | 3 + assets/static/bootstrap-icons/geo.svg | 3 + assets/static/bootstrap-icons/gift-fill.svg | 3 + assets/static/bootstrap-icons/gift.svg | 3 + assets/static/bootstrap-icons/git.svg | 3 + assets/static/bootstrap-icons/github.svg | 3 + assets/static/bootstrap-icons/gitlab.svg | 3 + .../static/bootstrap-icons/globe-americas.svg | 3 + .../bootstrap-icons/globe-asia-australia.svg | 4 + .../globe-central-south-asia.svg | 3 + .../bootstrap-icons/globe-europe-africa.svg | 3 + assets/static/bootstrap-icons/globe.svg | 3 + assets/static/bootstrap-icons/globe2.svg | 3 + assets/static/bootstrap-icons/google-play.svg | 3 + assets/static/bootstrap-icons/google.svg | 3 + assets/static/bootstrap-icons/gpu-card.svg | 5 + .../bootstrap-icons/graph-down-arrow.svg | 3 + assets/static/bootstrap-icons/graph-down.svg | 3 + .../static/bootstrap-icons/graph-up-arrow.svg | 3 + assets/static/bootstrap-icons/graph-up.svg | 3 + .../static/bootstrap-icons/grid-1x2-fill.svg | 3 + assets/static/bootstrap-icons/grid-1x2.svg | 3 + .../bootstrap-icons/grid-3x2-gap-fill.svg | 3 + .../static/bootstrap-icons/grid-3x2-gap.svg | 3 + assets/static/bootstrap-icons/grid-3x2.svg | 3 + .../bootstrap-icons/grid-3x3-gap-fill.svg | 3 + .../static/bootstrap-icons/grid-3x3-gap.svg | 3 + assets/static/bootstrap-icons/grid-3x3.svg | 3 + assets/static/bootstrap-icons/grid-fill.svg | 3 + assets/static/bootstrap-icons/grid.svg | 3 + .../bootstrap-icons/grip-horizontal.svg | 3 + .../static/bootstrap-icons/grip-vertical.svg | 3 + .../static/bootstrap-icons/h-circle-fill.svg | 3 + assets/static/bootstrap-icons/h-circle.svg | 3 + .../static/bootstrap-icons/h-square-fill.svg | 3 + assets/static/bootstrap-icons/h-square.svg | 4 + assets/static/bootstrap-icons/hammer.svg | 3 + .../bootstrap-icons/hand-index-fill.svg | 3 + .../bootstrap-icons/hand-index-thumb-fill.svg | 3 + .../bootstrap-icons/hand-index-thumb.svg | 3 + assets/static/bootstrap-icons/hand-index.svg | 3 + .../bootstrap-icons/hand-thumbs-down-fill.svg | 3 + .../bootstrap-icons/hand-thumbs-down.svg | 3 + .../bootstrap-icons/hand-thumbs-up-fill.svg | 3 + .../static/bootstrap-icons/hand-thumbs-up.svg | 3 + .../static/bootstrap-icons/handbag-fill.svg | 3 + assets/static/bootstrap-icons/handbag.svg | 3 + assets/static/bootstrap-icons/hash.svg | 3 + assets/static/bootstrap-icons/hdd-fill.svg | 3 + .../bootstrap-icons/hdd-network-fill.svg | 3 + assets/static/bootstrap-icons/hdd-network.svg | 4 + .../static/bootstrap-icons/hdd-rack-fill.svg | 3 + assets/static/bootstrap-icons/hdd-rack.svg | 4 + .../static/bootstrap-icons/hdd-stack-fill.svg | 3 + assets/static/bootstrap-icons/hdd-stack.svg | 5 + assets/static/bootstrap-icons/hdd.svg | 4 + assets/static/bootstrap-icons/hdmi-fill.svg | 3 + assets/static/bootstrap-icons/hdmi.svg | 4 + assets/static/bootstrap-icons/headphones.svg | 3 + assets/static/bootstrap-icons/headset-vr.svg | 4 + assets/static/bootstrap-icons/headset.svg | 3 + assets/static/bootstrap-icons/heart-arrow.svg | 3 + assets/static/bootstrap-icons/heart-fill.svg | 3 + assets/static/bootstrap-icons/heart-half.svg | 3 + .../bootstrap-icons/heart-pulse-fill.svg | 4 + assets/static/bootstrap-icons/heart-pulse.svg | 4 + assets/static/bootstrap-icons/heart.svg | 3 + .../bootstrap-icons/heartbreak-fill.svg | 3 + assets/static/bootstrap-icons/heartbreak.svg | 3 + assets/static/bootstrap-icons/hearts.svg | 3 + .../static/bootstrap-icons/heptagon-fill.svg | 3 + .../static/bootstrap-icons/heptagon-half.svg | 3 + assets/static/bootstrap-icons/heptagon.svg | 3 + .../static/bootstrap-icons/hexagon-fill.svg | 3 + .../static/bootstrap-icons/hexagon-half.svg | 3 + assets/static/bootstrap-icons/hexagon.svg | 3 + assets/static/bootstrap-icons/highlighter.svg | 3 + assets/static/bootstrap-icons/highlights.svg | 3 + .../static/bootstrap-icons/hospital-fill.svg | 3 + assets/static/bootstrap-icons/hospital.svg | 4 + .../bootstrap-icons/hourglass-bottom.svg | 3 + .../bootstrap-icons/hourglass-split.svg | 3 + .../static/bootstrap-icons/hourglass-top.svg | 3 + assets/static/bootstrap-icons/hourglass.svg | 3 + .../static/bootstrap-icons/house-add-fill.svg | 5 + assets/static/bootstrap-icons/house-add.svg | 4 + .../bootstrap-icons/house-check-fill.svg | 5 + assets/static/bootstrap-icons/house-check.svg | 4 + .../bootstrap-icons/house-dash-fill.svg | 5 + assets/static/bootstrap-icons/house-dash.svg | 4 + .../bootstrap-icons/house-door-fill.svg | 3 + assets/static/bootstrap-icons/house-door.svg | 3 + .../bootstrap-icons/house-down-fill.svg | 5 + assets/static/bootstrap-icons/house-down.svg | 4 + .../house-exclamation-fill.svg | 5 + .../bootstrap-icons/house-exclamation.svg | 4 + assets/static/bootstrap-icons/house-fill.svg | 4 + .../bootstrap-icons/house-gear-fill.svg | 5 + assets/static/bootstrap-icons/house-gear.svg | 4 + .../bootstrap-icons/house-heart-fill.svg | 4 + assets/static/bootstrap-icons/house-heart.svg | 4 + .../bootstrap-icons/house-lock-fill.svg | 5 + assets/static/bootstrap-icons/house-lock.svg | 4 + .../bootstrap-icons/house-slash-fill.svg | 5 + assets/static/bootstrap-icons/house-slash.svg | 4 + .../static/bootstrap-icons/house-up-fill.svg | 5 + assets/static/bootstrap-icons/house-up.svg | 4 + .../static/bootstrap-icons/house-x-fill.svg | 5 + assets/static/bootstrap-icons/house-x.svg | 4 + assets/static/bootstrap-icons/house.svg | 3 + assets/static/bootstrap-icons/houses-fill.svg | 4 + assets/static/bootstrap-icons/houses.svg | 3 + assets/static/bootstrap-icons/hr.svg | 3 + assets/static/bootstrap-icons/hurricane.svg | 3 + assets/static/bootstrap-icons/hypnotize.svg | 4 + assets/static/bootstrap-icons/image-alt.svg | 3 + assets/static/bootstrap-icons/image-fill.svg | 3 + assets/static/bootstrap-icons/image.svg | 4 + assets/static/bootstrap-icons/images.svg | 4 + assets/static/bootstrap-icons/inbox-fill.svg | 3 + assets/static/bootstrap-icons/inbox.svg | 3 + .../static/bootstrap-icons/inboxes-fill.svg | 3 + assets/static/bootstrap-icons/inboxes.svg | 3 + assets/static/bootstrap-icons/incognito.svg | 3 + assets/static/bootstrap-icons/indent.svg | 4 + assets/static/bootstrap-icons/infinity.svg | 3 + .../bootstrap-icons/info-circle-fill.svg | 3 + assets/static/bootstrap-icons/info-circle.svg | 4 + assets/static/bootstrap-icons/info-lg.svg | 3 + .../bootstrap-icons/info-square-fill.svg | 3 + assets/static/bootstrap-icons/info-square.svg | 4 + assets/static/bootstrap-icons/info.svg | 3 + .../bootstrap-icons/input-cursor-text.svg | 4 + .../static/bootstrap-icons/input-cursor.svg | 4 + assets/static/bootstrap-icons/instagram.svg | 3 + assets/static/bootstrap-icons/intersect.svg | 3 + .../static/bootstrap-icons/journal-album.svg | 5 + .../bootstrap-icons/journal-arrow-down.svg | 5 + .../bootstrap-icons/journal-arrow-up.svg | 5 + .../bootstrap-icons/journal-bookmark-fill.svg | 5 + .../bootstrap-icons/journal-bookmark.svg | 5 + .../static/bootstrap-icons/journal-check.svg | 5 + .../static/bootstrap-icons/journal-code.svg | 5 + .../bootstrap-icons/journal-medical.svg | 5 + .../static/bootstrap-icons/journal-minus.svg | 5 + .../static/bootstrap-icons/journal-plus.svg | 5 + .../bootstrap-icons/journal-richtext.svg | 5 + .../static/bootstrap-icons/journal-text.svg | 5 + assets/static/bootstrap-icons/journal-x.svg | 5 + assets/static/bootstrap-icons/journal.svg | 4 + assets/static/bootstrap-icons/journals.svg | 4 + assets/static/bootstrap-icons/joystick.svg | 4 + .../static/bootstrap-icons/justify-left.svg | 3 + .../static/bootstrap-icons/justify-right.svg | 3 + assets/static/bootstrap-icons/justify.svg | 3 + assets/static/bootstrap-icons/kanban-fill.svg | 3 + assets/static/bootstrap-icons/kanban.svg | 4 + assets/static/bootstrap-icons/key-fill.svg | 3 + assets/static/bootstrap-icons/key.svg | 4 + .../static/bootstrap-icons/keyboard-fill.svg | 3 + assets/static/bootstrap-icons/keyboard.svg | 4 + assets/static/bootstrap-icons/ladder.svg | 3 + assets/static/bootstrap-icons/lamp-fill.svg | 4 + assets/static/bootstrap-icons/lamp.svg | 4 + assets/static/bootstrap-icons/laptop-fill.svg | 3 + assets/static/bootstrap-icons/laptop.svg | 3 + .../static/bootstrap-icons/layer-backward.svg | 4 + .../static/bootstrap-icons/layer-forward.svg | 4 + assets/static/bootstrap-icons/layers-fill.svg | 4 + assets/static/bootstrap-icons/layers-half.svg | 3 + assets/static/bootstrap-icons/layers.svg | 3 + .../layout-sidebar-inset-reverse.svg | 4 + .../bootstrap-icons/layout-sidebar-inset.svg | 4 + .../layout-sidebar-reverse.svg | 3 + .../static/bootstrap-icons/layout-sidebar.svg | 3 + .../static/bootstrap-icons/layout-split.svg | 3 + .../layout-text-sidebar-reverse.svg | 4 + .../bootstrap-icons/layout-text-sidebar.svg | 4 + .../layout-text-window-reverse.svg | 4 + .../bootstrap-icons/layout-text-window.svg | 4 + .../bootstrap-icons/layout-three-columns.svg | 3 + assets/static/bootstrap-icons/layout-wtf.svg | 3 + .../static/bootstrap-icons/life-preserver.svg | 3 + .../static/bootstrap-icons/lightbulb-fill.svg | 3 + .../bootstrap-icons/lightbulb-off-fill.svg | 3 + .../static/bootstrap-icons/lightbulb-off.svg | 3 + assets/static/bootstrap-icons/lightbulb.svg | 3 + .../bootstrap-icons/lightning-charge-fill.svg | 3 + .../bootstrap-icons/lightning-charge.svg | 3 + .../static/bootstrap-icons/lightning-fill.svg | 3 + assets/static/bootstrap-icons/lightning.svg | 3 + assets/static/bootstrap-icons/line.svg | 3 + assets/static/bootstrap-icons/link-45deg.svg | 4 + assets/static/bootstrap-icons/link.svg | 4 + assets/static/bootstrap-icons/linkedin.svg | 3 + assets/static/bootstrap-icons/list-check.svg | 3 + .../bootstrap-icons/list-columns-reverse.svg | 3 + .../static/bootstrap-icons/list-columns.svg | 3 + assets/static/bootstrap-icons/list-nested.svg | 3 + assets/static/bootstrap-icons/list-ol.svg | 4 + assets/static/bootstrap-icons/list-stars.svg | 4 + assets/static/bootstrap-icons/list-task.svg | 5 + assets/static/bootstrap-icons/list-ul.svg | 3 + assets/static/bootstrap-icons/list.svg | 3 + assets/static/bootstrap-icons/lock-fill.svg | 3 + assets/static/bootstrap-icons/lock.svg | 3 + .../static/bootstrap-icons/luggage-fill.svg | 4 + assets/static/bootstrap-icons/luggage.svg | 4 + assets/static/bootstrap-icons/lungs-fill.svg | 3 + assets/static/bootstrap-icons/lungs.svg | 3 + assets/static/bootstrap-icons/magic.svg | 3 + assets/static/bootstrap-icons/magnet-fill.svg | 3 + assets/static/bootstrap-icons/magnet.svg | 3 + .../static/bootstrap-icons/mailbox-flag.svg | 4 + assets/static/bootstrap-icons/mailbox.svg | 4 + .../static/bootstrap-icons/mailbox2-flag.svg | 4 + assets/static/bootstrap-icons/mailbox2.svg | 4 + assets/static/bootstrap-icons/map-fill.svg | 3 + assets/static/bootstrap-icons/map.svg | 3 + .../static/bootstrap-icons/markdown-fill.svg | 3 + assets/static/bootstrap-icons/markdown.svg | 6 + assets/static/bootstrap-icons/marker-tip.svg | 3 + assets/static/bootstrap-icons/mask.svg | 3 + assets/static/bootstrap-icons/mastodon.svg | 3 + assets/static/bootstrap-icons/medium.svg | 3 + .../static/bootstrap-icons/megaphone-fill.svg | 3 + assets/static/bootstrap-icons/megaphone.svg | 3 + assets/static/bootstrap-icons/memory.svg | 3 + .../static/bootstrap-icons/menu-app-fill.svg | 3 + assets/static/bootstrap-icons/menu-app.svg | 3 + .../bootstrap-icons/menu-button-fill.svg | 3 + .../bootstrap-icons/menu-button-wide-fill.svg | 3 + .../bootstrap-icons/menu-button-wide.svg | 4 + assets/static/bootstrap-icons/menu-button.svg | 4 + assets/static/bootstrap-icons/menu-down.svg | 3 + assets/static/bootstrap-icons/menu-up.svg | 3 + assets/static/bootstrap-icons/messenger.svg | 3 + assets/static/bootstrap-icons/meta.svg | 3 + assets/static/bootstrap-icons/mic-fill.svg | 4 + .../static/bootstrap-icons/mic-mute-fill.svg | 4 + assets/static/bootstrap-icons/mic-mute.svg | 4 + assets/static/bootstrap-icons/mic.svg | 4 + .../bootstrap-icons/microsoft-teams.svg | 4 + assets/static/bootstrap-icons/microsoft.svg | 3 + .../bootstrap-icons/minecart-loaded.svg | 4 + assets/static/bootstrap-icons/minecart.svg | 3 + assets/static/bootstrap-icons/modem-fill.svg | 3 + assets/static/bootstrap-icons/modem.svg | 4 + assets/static/bootstrap-icons/moisture.svg | 3 + assets/static/bootstrap-icons/moon-fill.svg | 3 + .../bootstrap-icons/moon-stars-fill.svg | 4 + assets/static/bootstrap-icons/moon-stars.svg | 4 + assets/static/bootstrap-icons/moon.svg | 3 + .../bootstrap-icons/mortarboard-fill.svg | 4 + assets/static/bootstrap-icons/mortarboard.svg | 4 + .../bootstrap-icons/motherboard-fill.svg | 4 + assets/static/bootstrap-icons/motherboard.svg | 4 + assets/static/bootstrap-icons/mouse-fill.svg | 3 + assets/static/bootstrap-icons/mouse.svg | 3 + assets/static/bootstrap-icons/mouse2-fill.svg | 3 + assets/static/bootstrap-icons/mouse2.svg | 3 + assets/static/bootstrap-icons/mouse3-fill.svg | 3 + assets/static/bootstrap-icons/mouse3.svg | 3 + .../bootstrap-icons/music-note-beamed.svg | 5 + .../bootstrap-icons/music-note-list.svg | 6 + assets/static/bootstrap-icons/music-note.svg | 5 + .../bootstrap-icons/music-player-fill.svg | 4 + .../static/bootstrap-icons/music-player.svg | 5 + assets/static/bootstrap-icons/newspaper.svg | 4 + .../bootstrap-icons/nintendo-switch.svg | 4 + .../bootstrap-icons/node-minus-fill.svg | 3 + assets/static/bootstrap-icons/node-minus.svg | 3 + .../static/bootstrap-icons/node-plus-fill.svg | 3 + assets/static/bootstrap-icons/node-plus.svg | 3 + .../bootstrap-icons/noise-reduction.svg | 4 + assets/static/bootstrap-icons/nut-fill.svg | 3 + assets/static/bootstrap-icons/nut.svg | 4 + assets/static/bootstrap-icons/nvidia.svg | 3 + assets/static/bootstrap-icons/nvme-fill.svg | 4 + assets/static/bootstrap-icons/nvme.svg | 4 + .../static/bootstrap-icons/octagon-fill.svg | 3 + .../static/bootstrap-icons/octagon-half.svg | 3 + assets/static/bootstrap-icons/octagon.svg | 3 + .../static/bootstrap-icons/opencollective.svg | 4 + .../bootstrap-icons/optical-audio-fill.svg | 4 + .../static/bootstrap-icons/optical-audio.svg | 5 + assets/static/bootstrap-icons/option.svg | 3 + assets/static/bootstrap-icons/outlet.svg | 4 + .../static/bootstrap-icons/p-circle-fill.svg | 3 + assets/static/bootstrap-icons/p-circle.svg | 3 + .../static/bootstrap-icons/p-square-fill.svg | 4 + assets/static/bootstrap-icons/p-square.svg | 4 + .../static/bootstrap-icons/paint-bucket.svg | 3 + .../static/bootstrap-icons/palette-fill.svg | 3 + assets/static/bootstrap-icons/palette.svg | 4 + assets/static/bootstrap-icons/palette2.svg | 3 + assets/static/bootstrap-icons/paperclip.svg | 3 + assets/static/bootstrap-icons/paragraph.svg | 3 + assets/static/bootstrap-icons/pass-fill.svg | 3 + assets/static/bootstrap-icons/pass.svg | 4 + .../static/bootstrap-icons/passport-fill.svg | 4 + assets/static/bootstrap-icons/passport.svg | 4 + .../bootstrap-icons/patch-check-fill.svg | 3 + assets/static/bootstrap-icons/patch-check.svg | 4 + .../patch-exclamation-fill.svg | 3 + .../bootstrap-icons/patch-exclamation.svg | 4 + .../bootstrap-icons/patch-minus-fill.svg | 3 + assets/static/bootstrap-icons/patch-minus.svg | 4 + .../bootstrap-icons/patch-plus-fill.svg | 3 + assets/static/bootstrap-icons/patch-plus.svg | 4 + .../bootstrap-icons/patch-question-fill.svg | 3 + .../static/bootstrap-icons/patch-question.svg | 5 + .../static/bootstrap-icons/pause-btn-fill.svg | 3 + assets/static/bootstrap-icons/pause-btn.svg | 4 + .../bootstrap-icons/pause-circle-fill.svg | 3 + .../static/bootstrap-icons/pause-circle.svg | 4 + assets/static/bootstrap-icons/pause-fill.svg | 3 + assets/static/bootstrap-icons/pause.svg | 3 + assets/static/bootstrap-icons/paypal.svg | 3 + .../bootstrap-icons/pc-display-horizontal.svg | 3 + assets/static/bootstrap-icons/pc-display.svg | 3 + .../static/bootstrap-icons/pc-horizontal.svg | 3 + assets/static/bootstrap-icons/pc.svg | 3 + .../bootstrap-icons/pci-card-network.svg | 5 + .../static/bootstrap-icons/pci-card-sound.svg | 5 + assets/static/bootstrap-icons/pci-card.svg | 4 + assets/static/bootstrap-icons/peace-fill.svg | 3 + assets/static/bootstrap-icons/peace.svg | 3 + assets/static/bootstrap-icons/pen-fill.svg | 3 + assets/static/bootstrap-icons/pen.svg | 3 + assets/static/bootstrap-icons/pencil-fill.svg | 3 + .../static/bootstrap-icons/pencil-square.svg | 4 + assets/static/bootstrap-icons/pencil.svg | 3 + .../static/bootstrap-icons/pentagon-fill.svg | 3 + .../static/bootstrap-icons/pentagon-half.svg | 3 + assets/static/bootstrap-icons/pentagon.svg | 3 + assets/static/bootstrap-icons/people-fill.svg | 3 + assets/static/bootstrap-icons/people.svg | 3 + assets/static/bootstrap-icons/percent.svg | 3 + assets/static/bootstrap-icons/person-add.svg | 4 + .../static/bootstrap-icons/person-arms-up.svg | 4 + .../bootstrap-icons/person-badge-fill.svg | 3 + .../static/bootstrap-icons/person-badge.svg | 4 + .../bootstrap-icons/person-bounding-box.svg | 4 + .../bootstrap-icons/person-check-fill.svg | 4 + .../static/bootstrap-icons/person-check.svg | 4 + .../static/bootstrap-icons/person-circle.svg | 4 + .../bootstrap-icons/person-dash-fill.svg | 4 + assets/static/bootstrap-icons/person-dash.svg | 4 + assets/static/bootstrap-icons/person-down.svg | 4 + .../bootstrap-icons/person-exclamation.svg | 4 + .../bootstrap-icons/person-fill-add.svg | 4 + .../bootstrap-icons/person-fill-check.svg | 4 + .../bootstrap-icons/person-fill-dash.svg | 4 + .../bootstrap-icons/person-fill-down.svg | 4 + .../person-fill-exclamation.svg | 4 + .../bootstrap-icons/person-fill-gear.svg | 3 + .../bootstrap-icons/person-fill-lock.svg | 3 + .../bootstrap-icons/person-fill-slash.svg | 3 + .../static/bootstrap-icons/person-fill-up.svg | 4 + .../static/bootstrap-icons/person-fill-x.svg | 4 + assets/static/bootstrap-icons/person-fill.svg | 3 + assets/static/bootstrap-icons/person-gear.svg | 3 + .../static/bootstrap-icons/person-heart.svg | 3 + .../static/bootstrap-icons/person-hearts.svg | 3 + .../bootstrap-icons/person-lines-fill.svg | 3 + assets/static/bootstrap-icons/person-lock.svg | 3 + .../bootstrap-icons/person-plus-fill.svg | 4 + assets/static/bootstrap-icons/person-plus.svg | 4 + .../bootstrap-icons/person-raised-hand.svg | 4 + .../static/bootstrap-icons/person-rolodex.svg | 4 + .../static/bootstrap-icons/person-slash.svg | 3 + .../static/bootstrap-icons/person-square.svg | 4 + .../bootstrap-icons/person-standing-dress.svg | 3 + .../bootstrap-icons/person-standing.svg | 3 + assets/static/bootstrap-icons/person-up.svg | 4 + .../bootstrap-icons/person-vcard-fill.svg | 3 + .../static/bootstrap-icons/person-vcard.svg | 4 + .../static/bootstrap-icons/person-video.svg | 4 + .../static/bootstrap-icons/person-video2.svg | 4 + .../static/bootstrap-icons/person-video3.svg | 4 + .../static/bootstrap-icons/person-walking.svg | 4 + .../bootstrap-icons/person-wheelchair.svg | 3 + .../bootstrap-icons/person-workspace.svg | 4 + .../static/bootstrap-icons/person-x-fill.svg | 3 + assets/static/bootstrap-icons/person-x.svg | 4 + assets/static/bootstrap-icons/person.svg | 3 + assets/static/bootstrap-icons/phone-fill.svg | 3 + assets/static/bootstrap-icons/phone-flip.svg | 3 + .../bootstrap-icons/phone-landscape-fill.svg | 3 + .../bootstrap-icons/phone-landscape.svg | 4 + .../bootstrap-icons/phone-vibrate-fill.svg | 3 + .../static/bootstrap-icons/phone-vibrate.svg | 4 + assets/static/bootstrap-icons/phone.svg | 4 + .../static/bootstrap-icons/pie-chart-fill.svg | 3 + assets/static/bootstrap-icons/pie-chart.svg | 3 + .../bootstrap-icons/piggy-bank-fill.svg | 3 + assets/static/bootstrap-icons/piggy-bank.svg | 4 + .../static/bootstrap-icons/pin-angle-fill.svg | 3 + assets/static/bootstrap-icons/pin-angle.svg | 3 + assets/static/bootstrap-icons/pin-fill.svg | 3 + .../static/bootstrap-icons/pin-map-fill.svg | 4 + assets/static/bootstrap-icons/pin-map.svg | 4 + assets/static/bootstrap-icons/pin.svg | 3 + assets/static/bootstrap-icons/pinterest.svg | 3 + assets/static/bootstrap-icons/pip-fill.svg | 3 + assets/static/bootstrap-icons/pip.svg | 4 + .../static/bootstrap-icons/play-btn-fill.svg | 3 + assets/static/bootstrap-icons/play-btn.svg | 4 + .../bootstrap-icons/play-circle-fill.svg | 3 + assets/static/bootstrap-icons/play-circle.svg | 4 + assets/static/bootstrap-icons/play-fill.svg | 3 + assets/static/bootstrap-icons/play.svg | 3 + assets/static/bootstrap-icons/playstation.svg | 3 + assets/static/bootstrap-icons/plug-fill.svg | 3 + assets/static/bootstrap-icons/plug.svg | 3 + assets/static/bootstrap-icons/plugin.svg | 3 + .../bootstrap-icons/plus-circle-dotted.svg | 3 + .../bootstrap-icons/plus-circle-fill.svg | 3 + assets/static/bootstrap-icons/plus-circle.svg | 4 + assets/static/bootstrap-icons/plus-lg.svg | 3 + .../bootstrap-icons/plus-slash-minus.svg | 3 + .../bootstrap-icons/plus-square-dotted.svg | 3 + .../bootstrap-icons/plus-square-fill.svg | 3 + assets/static/bootstrap-icons/plus-square.svg | 4 + assets/static/bootstrap-icons/plus.svg | 3 + .../static/bootstrap-icons/postage-fill.svg | 4 + .../bootstrap-icons/postage-heart-fill.svg | 4 + .../static/bootstrap-icons/postage-heart.svg | 4 + assets/static/bootstrap-icons/postage.svg | 4 + .../static/bootstrap-icons/postcard-fill.svg | 4 + .../bootstrap-icons/postcard-heart-fill.svg | 3 + .../static/bootstrap-icons/postcard-heart.svg | 4 + assets/static/bootstrap-icons/postcard.svg | 3 + assets/static/bootstrap-icons/power.svg | 4 + .../static/bootstrap-icons/prescription.svg | 4 + .../static/bootstrap-icons/prescription2.svg | 4 + .../static/bootstrap-icons/printer-fill.svg | 4 + assets/static/bootstrap-icons/printer.svg | 4 + .../static/bootstrap-icons/projector-fill.svg | 3 + assets/static/bootstrap-icons/projector.svg | 4 + assets/static/bootstrap-icons/puzzle-fill.svg | 3 + assets/static/bootstrap-icons/puzzle.svg | 3 + .../static/bootstrap-icons/qr-code-scan.svg | 7 + assets/static/bootstrap-icons/qr-code.svg | 7 + .../bootstrap-icons/question-circle-fill.svg | 3 + .../bootstrap-icons/question-circle.svg | 4 + .../bootstrap-icons/question-diamond-fill.svg | 3 + .../bootstrap-icons/question-diamond.svg | 4 + assets/static/bootstrap-icons/question-lg.svg | 3 + .../bootstrap-icons/question-octagon-fill.svg | 3 + .../bootstrap-icons/question-octagon.svg | 4 + .../bootstrap-icons/question-square-fill.svg | 3 + .../bootstrap-icons/question-square.svg | 4 + assets/static/bootstrap-icons/question.svg | 3 + assets/static/bootstrap-icons/quora.svg | 3 + assets/static/bootstrap-icons/quote.svg | 3 + .../static/bootstrap-icons/r-circle-fill.svg | 3 + assets/static/bootstrap-icons/r-circle.svg | 3 + .../static/bootstrap-icons/r-square-fill.svg | 4 + assets/static/bootstrap-icons/r-square.svg | 4 + assets/static/bootstrap-icons/radar.svg | 3 + assets/static/bootstrap-icons/radioactive.svg | 4 + assets/static/bootstrap-icons/rainbow.svg | 3 + .../static/bootstrap-icons/receipt-cutoff.svg | 4 + assets/static/bootstrap-icons/receipt.svg | 4 + assets/static/bootstrap-icons/reception-0.svg | 3 + assets/static/bootstrap-icons/reception-1.svg | 3 + assets/static/bootstrap-icons/reception-2.svg | 3 + assets/static/bootstrap-icons/reception-3.svg | 3 + assets/static/bootstrap-icons/reception-4.svg | 3 + .../bootstrap-icons/record-btn-fill.svg | 3 + assets/static/bootstrap-icons/record-btn.svg | 4 + .../bootstrap-icons/record-circle-fill.svg | 3 + .../static/bootstrap-icons/record-circle.svg | 4 + assets/static/bootstrap-icons/record-fill.svg | 3 + assets/static/bootstrap-icons/record.svg | 3 + .../static/bootstrap-icons/record2-fill.svg | 4 + assets/static/bootstrap-icons/record2.svg | 4 + assets/static/bootstrap-icons/recycle.svg | 3 + assets/static/bootstrap-icons/reddit.svg | 4 + assets/static/bootstrap-icons/regex.svg | 3 + assets/static/bootstrap-icons/repeat-1.svg | 4 + assets/static/bootstrap-icons/repeat.svg | 3 + .../static/bootstrap-icons/reply-all-fill.svg | 4 + assets/static/bootstrap-icons/reply-all.svg | 4 + assets/static/bootstrap-icons/reply-fill.svg | 3 + assets/static/bootstrap-icons/reply.svg | 3 + .../bootstrap-icons/rewind-btn-fill.svg | 3 + assets/static/bootstrap-icons/rewind-btn.svg | 4 + .../bootstrap-icons/rewind-circle-fill.svg | 3 + .../static/bootstrap-icons/rewind-circle.svg | 4 + assets/static/bootstrap-icons/rewind-fill.svg | 4 + assets/static/bootstrap-icons/rewind.svg | 4 + assets/static/bootstrap-icons/robot.svg | 4 + assets/static/bootstrap-icons/rocket-fill.svg | 4 + .../bootstrap-icons/rocket-takeoff-fill.svg | 4 + .../static/bootstrap-icons/rocket-takeoff.svg | 5 + assets/static/bootstrap-icons/rocket.svg | 5 + assets/static/bootstrap-icons/router-fill.svg | 6 + assets/static/bootstrap-icons/router.svg | 6 + assets/static/bootstrap-icons/rss-fill.svg | 3 + assets/static/bootstrap-icons/rss.svg | 4 + assets/static/bootstrap-icons/rulers.svg | 3 + assets/static/bootstrap-icons/safe-fill.svg | 4 + assets/static/bootstrap-icons/safe.svg | 4 + assets/static/bootstrap-icons/safe2-fill.svg | 4 + assets/static/bootstrap-icons/safe2.svg | 4 + assets/static/bootstrap-icons/save-fill.svg | 3 + assets/static/bootstrap-icons/save.svg | 3 + assets/static/bootstrap-icons/save2-fill.svg | 3 + assets/static/bootstrap-icons/save2.svg | 3 + assets/static/bootstrap-icons/scissors.svg | 3 + assets/static/bootstrap-icons/scooter.svg | 3 + assets/static/bootstrap-icons/screwdriver.svg | 3 + .../static/bootstrap-icons/sd-card-fill.svg | 3 + assets/static/bootstrap-icons/sd-card.svg | 4 + .../bootstrap-icons/search-heart-fill.svg | 3 + .../static/bootstrap-icons/search-heart.svg | 4 + assets/static/bootstrap-icons/search.svg | 3 + .../static/bootstrap-icons/segmented-nav.svg | 3 + .../bootstrap-icons/send-arrow-down-fill.svg | 4 + .../bootstrap-icons/send-arrow-down.svg | 4 + .../bootstrap-icons/send-arrow-up-fill.svg | 4 + .../static/bootstrap-icons/send-arrow-up.svg | 4 + .../bootstrap-icons/send-check-fill.svg | 4 + assets/static/bootstrap-icons/send-check.svg | 4 + .../static/bootstrap-icons/send-dash-fill.svg | 4 + assets/static/bootstrap-icons/send-dash.svg | 4 + .../bootstrap-icons/send-exclamation-fill.svg | 4 + .../bootstrap-icons/send-exclamation.svg | 4 + assets/static/bootstrap-icons/send-fill.svg | 3 + .../static/bootstrap-icons/send-plus-fill.svg | 4 + assets/static/bootstrap-icons/send-plus.svg | 4 + .../bootstrap-icons/send-slash-fill.svg | 4 + assets/static/bootstrap-icons/send-slash.svg | 4 + assets/static/bootstrap-icons/send-x-fill.svg | 4 + assets/static/bootstrap-icons/send-x.svg | 4 + assets/static/bootstrap-icons/send.svg | 3 + assets/static/bootstrap-icons/server.svg | 5 + assets/static/bootstrap-icons/shadows.svg | 3 + assets/static/bootstrap-icons/share-fill.svg | 3 + assets/static/bootstrap-icons/share.svg | 3 + .../static/bootstrap-icons/shield-check.svg | 4 + .../bootstrap-icons/shield-exclamation.svg | 4 + .../bootstrap-icons/shield-fill-check.svg | 3 + .../shield-fill-exclamation.svg | 3 + .../bootstrap-icons/shield-fill-minus.svg | 3 + .../bootstrap-icons/shield-fill-plus.svg | 3 + .../static/bootstrap-icons/shield-fill-x.svg | 3 + assets/static/bootstrap-icons/shield-fill.svg | 3 + .../bootstrap-icons/shield-lock-fill.svg | 3 + assets/static/bootstrap-icons/shield-lock.svg | 4 + .../static/bootstrap-icons/shield-minus.svg | 4 + assets/static/bootstrap-icons/shield-plus.svg | 4 + .../static/bootstrap-icons/shield-shaded.svg | 3 + .../bootstrap-icons/shield-slash-fill.svg | 3 + .../static/bootstrap-icons/shield-slash.svg | 3 + assets/static/bootstrap-icons/shield-x.svg | 4 + assets/static/bootstrap-icons/shield.svg | 3 + assets/static/bootstrap-icons/shift-fill.svg | 3 + assets/static/bootstrap-icons/shift.svg | 3 + assets/static/bootstrap-icons/shop-window.svg | 3 + assets/static/bootstrap-icons/shop.svg | 3 + assets/static/bootstrap-icons/shuffle.svg | 4 + .../bootstrap-icons/sign-dead-end-fill.svg | 4 + .../static/bootstrap-icons/sign-dead-end.svg | 4 + .../sign-do-not-enter-fill.svg | 4 + .../bootstrap-icons/sign-do-not-enter.svg | 4 + .../sign-intersection-fill.svg | 3 + .../sign-intersection-side-fill.svg | 3 + .../sign-intersection-side.svg | 4 + .../sign-intersection-t-fill.svg | 3 + .../bootstrap-icons/sign-intersection-t.svg | 4 + .../sign-intersection-y-fill.svg | 3 + .../bootstrap-icons/sign-intersection-y.svg | 4 + .../bootstrap-icons/sign-intersection.svg | 4 + .../bootstrap-icons/sign-merge-left-fill.svg | 3 + .../bootstrap-icons/sign-merge-left.svg | 4 + .../bootstrap-icons/sign-merge-right-fill.svg | 3 + .../bootstrap-icons/sign-merge-right.svg | 4 + .../sign-no-left-turn-fill.svg | 4 + .../bootstrap-icons/sign-no-left-turn.svg | 3 + .../bootstrap-icons/sign-no-parking-fill.svg | 4 + .../bootstrap-icons/sign-no-parking.svg | 3 + .../sign-no-right-turn-fill.svg | 4 + .../bootstrap-icons/sign-no-right-turn.svg | 3 + .../bootstrap-icons/sign-railroad-fill.svg | 5 + .../static/bootstrap-icons/sign-railroad.svg | 4 + .../static/bootstrap-icons/sign-stop-fill.svg | 4 + .../bootstrap-icons/sign-stop-lights-fill.svg | 4 + .../bootstrap-icons/sign-stop-lights.svg | 4 + assets/static/bootstrap-icons/sign-stop.svg | 5 + .../bootstrap-icons/sign-turn-left-fill.svg | 3 + .../static/bootstrap-icons/sign-turn-left.svg | 4 + .../bootstrap-icons/sign-turn-right-fill.svg | 3 + .../bootstrap-icons/sign-turn-right.svg | 4 + .../sign-turn-slight-left-fill.svg | 3 + .../bootstrap-icons/sign-turn-slight-left.svg | 4 + .../sign-turn-slight-right-fill.svg | 3 + .../sign-turn-slight-right.svg | 4 + .../bootstrap-icons/sign-yield-fill.svg | 4 + assets/static/bootstrap-icons/sign-yield.svg | 5 + assets/static/bootstrap-icons/signal.svg | 3 + .../bootstrap-icons/signpost-2-fill.svg | 3 + assets/static/bootstrap-icons/signpost-2.svg | 3 + .../static/bootstrap-icons/signpost-fill.svg | 3 + .../bootstrap-icons/signpost-split-fill.svg | 3 + .../static/bootstrap-icons/signpost-split.svg | 3 + assets/static/bootstrap-icons/signpost.svg | 3 + assets/static/bootstrap-icons/sim-fill.svg | 4 + .../static/bootstrap-icons/sim-slash-fill.svg | 3 + assets/static/bootstrap-icons/sim-slash.svg | 3 + assets/static/bootstrap-icons/sim.svg | 4 + assets/static/bootstrap-icons/sina-weibo.svg | 4 + .../skip-backward-btn-fill.svg | 3 + .../bootstrap-icons/skip-backward-btn.svg | 4 + .../skip-backward-circle-fill.svg | 3 + .../bootstrap-icons/skip-backward-circle.svg | 4 + .../bootstrap-icons/skip-backward-fill.svg | 3 + .../static/bootstrap-icons/skip-backward.svg | 3 + .../bootstrap-icons/skip-end-btn-fill.svg | 3 + .../static/bootstrap-icons/skip-end-btn.svg | 4 + .../bootstrap-icons/skip-end-circle-fill.svg | 3 + .../bootstrap-icons/skip-end-circle.svg | 4 + .../static/bootstrap-icons/skip-end-fill.svg | 3 + assets/static/bootstrap-icons/skip-end.svg | 3 + .../bootstrap-icons/skip-forward-btn-fill.svg | 3 + .../bootstrap-icons/skip-forward-btn.svg | 4 + .../skip-forward-circle-fill.svg | 3 + .../bootstrap-icons/skip-forward-circle.svg | 4 + .../bootstrap-icons/skip-forward-fill.svg | 3 + .../static/bootstrap-icons/skip-forward.svg | 3 + .../bootstrap-icons/skip-start-btn-fill.svg | 3 + .../static/bootstrap-icons/skip-start-btn.svg | 4 + .../skip-start-circle-fill.svg | 3 + .../bootstrap-icons/skip-start-circle.svg | 4 + .../bootstrap-icons/skip-start-fill.svg | 3 + assets/static/bootstrap-icons/skip-start.svg | 3 + assets/static/bootstrap-icons/skype.svg | 3 + assets/static/bootstrap-icons/slack.svg | 3 + .../bootstrap-icons/slash-circle-fill.svg | 3 + .../static/bootstrap-icons/slash-circle.svg | 4 + assets/static/bootstrap-icons/slash-lg.svg | 3 + .../bootstrap-icons/slash-square-fill.svg | 3 + .../static/bootstrap-icons/slash-square.svg | 4 + assets/static/bootstrap-icons/slash.svg | 3 + assets/static/bootstrap-icons/sliders.svg | 3 + .../bootstrap-icons/sliders2-vertical.svg | 3 + assets/static/bootstrap-icons/sliders2.svg | 3 + assets/static/bootstrap-icons/smartwatch.svg | 4 + assets/static/bootstrap-icons/snapchat.svg | 3 + assets/static/bootstrap-icons/snow.svg | 3 + assets/static/bootstrap-icons/snow2.svg | 3 + assets/static/bootstrap-icons/snow3.svg | 4 + .../bootstrap-icons/sort-alpha-down-alt.svg | 5 + .../bootstrap-icons/sort-alpha-down.svg | 4 + .../bootstrap-icons/sort-alpha-up-alt.svg | 5 + .../static/bootstrap-icons/sort-alpha-up.svg | 4 + .../static/bootstrap-icons/sort-down-alt.svg | 3 + assets/static/bootstrap-icons/sort-down.svg | 3 + .../bootstrap-icons/sort-numeric-down-alt.svg | 4 + .../bootstrap-icons/sort-numeric-down.svg | 5 + .../bootstrap-icons/sort-numeric-up-alt.svg | 4 + .../bootstrap-icons/sort-numeric-up.svg | 5 + assets/static/bootstrap-icons/sort-up-alt.svg | 3 + assets/static/bootstrap-icons/sort-up.svg | 3 + assets/static/bootstrap-icons/soundwave.svg | 3 + assets/static/bootstrap-icons/sourceforge.svg | 4 + .../static/bootstrap-icons/speaker-fill.svg | 4 + assets/static/bootstrap-icons/speaker.svg | 4 + assets/static/bootstrap-icons/speedometer.svg | 4 + .../static/bootstrap-icons/speedometer2.svg | 4 + assets/static/bootstrap-icons/spellcheck.svg | 4 + assets/static/bootstrap-icons/spotify.svg | 3 + assets/static/bootstrap-icons/square-fill.svg | 3 + assets/static/bootstrap-icons/square-half.svg | 3 + assets/static/bootstrap-icons/square.svg | 3 + .../static/bootstrap-icons/stack-overflow.svg | 4 + assets/static/bootstrap-icons/stack.svg | 4 + assets/static/bootstrap-icons/star-fill.svg | 3 + assets/static/bootstrap-icons/star-half.svg | 3 + assets/static/bootstrap-icons/star.svg | 3 + assets/static/bootstrap-icons/stars.svg | 3 + assets/static/bootstrap-icons/steam.svg | 4 + .../static/bootstrap-icons/stickies-fill.svg | 4 + assets/static/bootstrap-icons/stickies.svg | 4 + assets/static/bootstrap-icons/sticky-fill.svg | 3 + assets/static/bootstrap-icons/sticky.svg | 3 + .../static/bootstrap-icons/stop-btn-fill.svg | 3 + assets/static/bootstrap-icons/stop-btn.svg | 4 + .../bootstrap-icons/stop-circle-fill.svg | 3 + assets/static/bootstrap-icons/stop-circle.svg | 4 + assets/static/bootstrap-icons/stop-fill.svg | 3 + assets/static/bootstrap-icons/stop.svg | 3 + .../bootstrap-icons/stoplights-fill.svg | 3 + assets/static/bootstrap-icons/stoplights.svg | 4 + .../static/bootstrap-icons/stopwatch-fill.svg | 3 + assets/static/bootstrap-icons/stopwatch.svg | 4 + assets/static/bootstrap-icons/strava.svg | 3 + assets/static/bootstrap-icons/stripe.svg | 3 + assets/static/bootstrap-icons/subscript.svg | 3 + assets/static/bootstrap-icons/substack.svg | 3 + assets/static/bootstrap-icons/subtract.svg | 3 + .../static/bootstrap-icons/suit-club-fill.svg | 3 + assets/static/bootstrap-icons/suit-club.svg | 3 + .../bootstrap-icons/suit-diamond-fill.svg | 3 + .../static/bootstrap-icons/suit-diamond.svg | 3 + .../bootstrap-icons/suit-heart-fill.svg | 3 + assets/static/bootstrap-icons/suit-heart.svg | 3 + .../bootstrap-icons/suit-spade-fill.svg | 3 + assets/static/bootstrap-icons/suit-spade.svg | 3 + .../static/bootstrap-icons/suitcase-fill.svg | 3 + .../bootstrap-icons/suitcase-lg-fill.svg | 3 + assets/static/bootstrap-icons/suitcase-lg.svg | 3 + assets/static/bootstrap-icons/suitcase.svg | 4 + .../static/bootstrap-icons/suitcase2-fill.svg | 3 + assets/static/bootstrap-icons/suitcase2.svg | 3 + assets/static/bootstrap-icons/sun-fill.svg | 3 + assets/static/bootstrap-icons/sun.svg | 3 + assets/static/bootstrap-icons/sunglasses.svg | 3 + .../static/bootstrap-icons/sunrise-fill.svg | 3 + assets/static/bootstrap-icons/sunrise.svg | 3 + assets/static/bootstrap-icons/sunset-fill.svg | 3 + assets/static/bootstrap-icons/sunset.svg | 3 + assets/static/bootstrap-icons/superscript.svg | 3 + .../bootstrap-icons/symmetry-horizontal.svg | 3 + .../bootstrap-icons/symmetry-vertical.svg | 3 + assets/static/bootstrap-icons/table.svg | 3 + assets/static/bootstrap-icons/tablet-fill.svg | 3 + .../bootstrap-icons/tablet-landscape-fill.svg | 3 + .../bootstrap-icons/tablet-landscape.svg | 4 + assets/static/bootstrap-icons/tablet.svg | 4 + assets/static/bootstrap-icons/tag-fill.svg | 3 + assets/static/bootstrap-icons/tag.svg | 4 + assets/static/bootstrap-icons/tags-fill.svg | 4 + assets/static/bootstrap-icons/tags.svg | 4 + .../bootstrap-icons/taxi-front-fill.svg | 3 + assets/static/bootstrap-icons/taxi-front.svg | 4 + assets/static/bootstrap-icons/telegram.svg | 3 + .../static/bootstrap-icons/telephone-fill.svg | 3 + .../telephone-forward-fill.svg | 3 + .../bootstrap-icons/telephone-forward.svg | 3 + .../telephone-inbound-fill.svg | 3 + .../bootstrap-icons/telephone-inbound.svg | 3 + .../bootstrap-icons/telephone-minus-fill.svg | 3 + .../bootstrap-icons/telephone-minus.svg | 4 + .../telephone-outbound-fill.svg | 3 + .../bootstrap-icons/telephone-outbound.svg | 3 + .../bootstrap-icons/telephone-plus-fill.svg | 3 + .../static/bootstrap-icons/telephone-plus.svg | 4 + .../bootstrap-icons/telephone-x-fill.svg | 3 + assets/static/bootstrap-icons/telephone-x.svg | 4 + assets/static/bootstrap-icons/telephone.svg | 3 + assets/static/bootstrap-icons/tencent-qq.svg | 4 + .../static/bootstrap-icons/terminal-dash.svg | 4 + .../static/bootstrap-icons/terminal-fill.svg | 3 + .../static/bootstrap-icons/terminal-plus.svg | 4 + .../static/bootstrap-icons/terminal-split.svg | 4 + assets/static/bootstrap-icons/terminal-x.svg | 4 + assets/static/bootstrap-icons/terminal.svg | 4 + assets/static/bootstrap-icons/text-center.svg | 3 + .../bootstrap-icons/text-indent-left.svg | 3 + .../bootstrap-icons/text-indent-right.svg | 3 + assets/static/bootstrap-icons/text-left.svg | 3 + .../static/bootstrap-icons/text-paragraph.svg | 3 + assets/static/bootstrap-icons/text-right.svg | 3 + assets/static/bootstrap-icons/text-wrap.svg | 3 + .../bootstrap-icons/textarea-resize.svg | 3 + assets/static/bootstrap-icons/textarea-t.svg | 4 + assets/static/bootstrap-icons/textarea.svg | 3 + .../bootstrap-icons/thermometer-half.svg | 4 + .../bootstrap-icons/thermometer-high.svg | 4 + .../bootstrap-icons/thermometer-low.svg | 4 + .../bootstrap-icons/thermometer-snow.svg | 4 + .../bootstrap-icons/thermometer-sun.svg | 4 + assets/static/bootstrap-icons/thermometer.svg | 4 + .../static/bootstrap-icons/threads-fill.svg | 4 + assets/static/bootstrap-icons/threads.svg | 3 + .../bootstrap-icons/three-dots-vertical.svg | 3 + assets/static/bootstrap-icons/three-dots.svg | 3 + .../bootstrap-icons/thunderbolt-fill.svg | 3 + assets/static/bootstrap-icons/thunderbolt.svg | 4 + .../bootstrap-icons/ticket-detailed-fill.svg | 3 + .../bootstrap-icons/ticket-detailed.svg | 4 + assets/static/bootstrap-icons/ticket-fill.svg | 3 + .../ticket-perforated-fill.svg | 3 + .../bootstrap-icons/ticket-perforated.svg | 4 + assets/static/bootstrap-icons/ticket.svg | 3 + assets/static/bootstrap-icons/tiktok.svg | 3 + assets/static/bootstrap-icons/toggle-off.svg | 3 + assets/static/bootstrap-icons/toggle-on.svg | 3 + assets/static/bootstrap-icons/toggle2-off.svg | 4 + assets/static/bootstrap-icons/toggle2-on.svg | 4 + assets/static/bootstrap-icons/toggles.svg | 3 + assets/static/bootstrap-icons/toggles2.svg | 5 + assets/static/bootstrap-icons/tools.svg | 3 + assets/static/bootstrap-icons/tornado.svg | 3 + .../train-freight-front-fill.svg | 3 + .../bootstrap-icons/train-freight-front.svg | 3 + .../bootstrap-icons/train-front-fill.svg | 3 + assets/static/bootstrap-icons/train-front.svg | 3 + .../train-lightrail-front-fill.svg | 3 + .../bootstrap-icons/train-lightrail-front.svg | 3 + assets/static/bootstrap-icons/translate.svg | 4 + .../static/bootstrap-icons/transparency.svg | 3 + assets/static/bootstrap-icons/trash-fill.svg | 3 + assets/static/bootstrap-icons/trash.svg | 4 + assets/static/bootstrap-icons/trash2-fill.svg | 3 + assets/static/bootstrap-icons/trash2.svg | 3 + assets/static/bootstrap-icons/trash3-fill.svg | 3 + assets/static/bootstrap-icons/trash3.svg | 3 + assets/static/bootstrap-icons/tree-fill.svg | 3 + assets/static/bootstrap-icons/tree.svg | 3 + assets/static/bootstrap-icons/trello.svg | 3 + .../static/bootstrap-icons/triangle-fill.svg | 3 + .../static/bootstrap-icons/triangle-half.svg | 3 + assets/static/bootstrap-icons/triangle.svg | 3 + assets/static/bootstrap-icons/trophy-fill.svg | 3 + assets/static/bootstrap-icons/trophy.svg | 3 + .../static/bootstrap-icons/tropical-storm.svg | 4 + .../static/bootstrap-icons/truck-flatbed.svg | 3 + .../bootstrap-icons/truck-front-fill.svg | 3 + assets/static/bootstrap-icons/truck-front.svg | 4 + assets/static/bootstrap-icons/truck.svg | 3 + assets/static/bootstrap-icons/tsunami.svg | 3 + assets/static/bootstrap-icons/tv-fill.svg | 3 + assets/static/bootstrap-icons/tv.svg | 3 + assets/static/bootstrap-icons/twitch.svg | 4 + assets/static/bootstrap-icons/twitter-x.svg | 3 + assets/static/bootstrap-icons/twitter.svg | 3 + assets/static/bootstrap-icons/type-bold.svg | 3 + assets/static/bootstrap-icons/type-h1.svg | 3 + assets/static/bootstrap-icons/type-h2.svg | 3 + assets/static/bootstrap-icons/type-h3.svg | 3 + assets/static/bootstrap-icons/type-h4.svg | 3 + assets/static/bootstrap-icons/type-h5.svg | 3 + assets/static/bootstrap-icons/type-h6.svg | 3 + assets/static/bootstrap-icons/type-italic.svg | 3 + .../bootstrap-icons/type-strikethrough.svg | 3 + .../static/bootstrap-icons/type-underline.svg | 3 + assets/static/bootstrap-icons/type.svg | 3 + assets/static/bootstrap-icons/ubuntu.svg | 3 + .../static/bootstrap-icons/ui-checks-grid.svg | 3 + assets/static/bootstrap-icons/ui-checks.svg | 3 + .../static/bootstrap-icons/ui-radios-grid.svg | 3 + assets/static/bootstrap-icons/ui-radios.svg | 3 + .../static/bootstrap-icons/umbrella-fill.svg | 3 + assets/static/bootstrap-icons/umbrella.svg | 3 + assets/static/bootstrap-icons/unindent.svg | 4 + assets/static/bootstrap-icons/union.svg | 3 + assets/static/bootstrap-icons/unity.svg | 3 + .../universal-access-circle.svg | 4 + .../bootstrap-icons/universal-access.svg | 3 + assets/static/bootstrap-icons/unlock-fill.svg | 3 + assets/static/bootstrap-icons/unlock.svg | 3 + assets/static/bootstrap-icons/upc-scan.svg | 3 + assets/static/bootstrap-icons/upc.svg | 3 + assets/static/bootstrap-icons/upload.svg | 4 + assets/static/bootstrap-icons/usb-c-fill.svg | 3 + assets/static/bootstrap-icons/usb-c.svg | 4 + .../static/bootstrap-icons/usb-drive-fill.svg | 3 + assets/static/bootstrap-icons/usb-drive.svg | 3 + assets/static/bootstrap-icons/usb-fill.svg | 3 + .../static/bootstrap-icons/usb-micro-fill.svg | 3 + assets/static/bootstrap-icons/usb-micro.svg | 4 + .../static/bootstrap-icons/usb-mini-fill.svg | 3 + assets/static/bootstrap-icons/usb-mini.svg | 4 + .../static/bootstrap-icons/usb-plug-fill.svg | 3 + assets/static/bootstrap-icons/usb-plug.svg | 3 + assets/static/bootstrap-icons/usb-symbol.svg | 3 + assets/static/bootstrap-icons/usb.svg | 4 + assets/static/bootstrap-icons/valentine.svg | 4 + assets/static/bootstrap-icons/valentine2.svg | 4 + assets/static/bootstrap-icons/vector-pen.svg | 4 + assets/static/bootstrap-icons/view-list.svg | 3 + .../static/bootstrap-icons/view-stacked.svg | 3 + assets/static/bootstrap-icons/vignette.svg | 4 + assets/static/bootstrap-icons/vimeo.svg | 3 + assets/static/bootstrap-icons/vinyl-fill.svg | 4 + assets/static/bootstrap-icons/vinyl.svg | 5 + assets/static/bootstrap-icons/virus.svg | 3 + assets/static/bootstrap-icons/virus2.svg | 3 + assets/static/bootstrap-icons/voicemail.svg | 3 + .../bootstrap-icons/volume-down-fill.svg | 3 + assets/static/bootstrap-icons/volume-down.svg | 3 + .../bootstrap-icons/volume-mute-fill.svg | 3 + assets/static/bootstrap-icons/volume-mute.svg | 3 + .../bootstrap-icons/volume-off-fill.svg | 3 + assets/static/bootstrap-icons/volume-off.svg | 3 + .../static/bootstrap-icons/volume-up-fill.svg | 5 + assets/static/bootstrap-icons/volume-up.svg | 5 + assets/static/bootstrap-icons/vr.svg | 3 + assets/static/bootstrap-icons/wallet-fill.svg | 4 + assets/static/bootstrap-icons/wallet.svg | 3 + assets/static/bootstrap-icons/wallet2.svg | 3 + assets/static/bootstrap-icons/watch.svg | 4 + assets/static/bootstrap-icons/water.svg | 3 + assets/static/bootstrap-icons/webcam-fill.svg | 4 + assets/static/bootstrap-icons/webcam.svg | 4 + assets/static/bootstrap-icons/wechat.svg | 4 + assets/static/bootstrap-icons/whatsapp.svg | 3 + assets/static/bootstrap-icons/wifi-1.svg | 3 + assets/static/bootstrap-icons/wifi-2.svg | 3 + assets/static/bootstrap-icons/wifi-off.svg | 3 + assets/static/bootstrap-icons/wifi.svg | 4 + assets/static/bootstrap-icons/wikipedia.svg | 3 + assets/static/bootstrap-icons/wind.svg | 3 + assets/static/bootstrap-icons/window-dash.svg | 5 + .../static/bootstrap-icons/window-desktop.svg | 4 + assets/static/bootstrap-icons/window-dock.svg | 4 + .../bootstrap-icons/window-fullscreen.svg | 4 + assets/static/bootstrap-icons/window-plus.svg | 5 + .../static/bootstrap-icons/window-sidebar.svg | 4 + .../static/bootstrap-icons/window-split.svg | 4 + .../static/bootstrap-icons/window-stack.svg | 4 + assets/static/bootstrap-icons/window-x.svg | 5 + assets/static/bootstrap-icons/window.svg | 4 + assets/static/bootstrap-icons/windows.svg | 3 + assets/static/bootstrap-icons/wordpress.svg | 5 + .../wrench-adjustable-circle-fill.svg | 4 + .../wrench-adjustable-circle.svg | 4 + .../bootstrap-icons/wrench-adjustable.svg | 4 + assets/static/bootstrap-icons/wrench.svg | 3 + .../static/bootstrap-icons/x-circle-fill.svg | 3 + assets/static/bootstrap-icons/x-circle.svg | 4 + .../static/bootstrap-icons/x-diamond-fill.svg | 3 + assets/static/bootstrap-icons/x-diamond.svg | 3 + assets/static/bootstrap-icons/x-lg.svg | 3 + .../static/bootstrap-icons/x-octagon-fill.svg | 3 + assets/static/bootstrap-icons/x-octagon.svg | 4 + .../static/bootstrap-icons/x-square-fill.svg | 3 + assets/static/bootstrap-icons/x-square.svg | 4 + assets/static/bootstrap-icons/x.svg | 3 + assets/static/bootstrap-icons/xbox.svg | 3 + assets/static/bootstrap-icons/yelp.svg | 3 + assets/static/bootstrap-icons/yin-yang.svg | 4 + assets/static/bootstrap-icons/youtube.svg | 3 + assets/static/bootstrap-icons/zoom-in.svg | 5 + assets/static/bootstrap-icons/zoom-out.svg | 5 + assets/static/css/main.css | 2654 ++++ assets/static/easymde/easymde.min.css | 7 + assets/static/easymde/easymde.min.js | 7 + assets/static/img/.keep | 0 assets/static/img/brainminder-icon.svg | 3993 ++++++ assets/static/img/brainminder.svg | 3976 ++++++ assets/static/img/icons/128x128.png | Bin 0 -> 24358 bytes assets/static/img/icons/144x144.png | Bin 0 -> 25809 bytes assets/static/img/icons/152x152.png | Bin 0 -> 27146 bytes assets/static/img/icons/192x192.png | Bin 0 -> 32701 bytes assets/static/img/icons/384x384.png | Bin 0 -> 66769 bytes assets/static/img/icons/512x512.png | Bin 0 -> 93117 bytes assets/static/img/icons/72x72.png | Bin 0 -> 18347 bytes assets/static/img/icons/96x96.png | Bin 0 -> 19868 bytes .../BrainMinder-screenshot-narrow-1.webp | Bin 0 -> 50162 bytes .../BrainMinder-screenshot-narrow.webp | Bin 0 -> 68794 bytes .../BrainMinder-screenshot-wide-1.webp | Bin 0 -> 81800 bytes .../BrainMinder-screenshot-wide.webp | Bin 0 -> 133772 bytes assets/static/js/.keep | 0 assets/static/js/Sortable.min.js | 2 + assets/static/js/handlebars.js | 2563 ++++ assets/static/js/htmx/ext/ajax-header.js | 7 + assets/static/js/htmx/ext/alpine-morph.js | 16 + assets/static/js/htmx/ext/class-tools.js | 92 + .../js/htmx/ext/client-side-templates.js | 96 + assets/static/js/htmx/ext/debug.js | 11 + assets/static/js/htmx/ext/disable-element.js | 18 + assets/static/js/htmx/ext/event-header.js | 37 + assets/static/js/htmx/ext/head-support.js | 141 + assets/static/js/htmx/ext/htmx-shoelace.js | 45 + assets/static/js/htmx/ext/include-vals.js | 24 + assets/static/js/htmx/ext/json-enc.js | 12 + assets/static/js/htmx/ext/loading-states.js | 183 + assets/static/js/htmx/ext/method-override.js | 11 + assets/static/js/htmx/ext/morphdom-swap.js | 17 + assets/static/js/htmx/ext/multi-swap.js | 45 + assets/static/js/htmx/ext/path-deps.js | 60 + assets/static/js/htmx/ext/preload.js | 147 + assets/static/js/htmx/ext/rails-method.js | 10 + assets/static/js/htmx/ext/remove-me.js | 27 + assets/static/js/htmx/ext/response-targets.js | 130 + assets/static/js/htmx/ext/restored.js | 15 + assets/static/js/htmx/ext/sse.js | 322 + assets/static/js/htmx/ext/ws.js | 477 + assets/static/js/htmx/htmx.d.ts | 399 + assets/static/js/htmx/htmx.js | 3818 ++++++ assets/static/js/htmx/htmx.min.js | 1 + assets/static/js/htmx/htmx.min.js.gz | Bin 0 -> 15236 bytes assets/static/js/htmx/htmx.test.ts | 96 + assets/static/js/hyperscript.min.js | 1 + assets/static/js/main.js | 256 + assets/static/js/serviceWorker.js | 59 + assets/static/js/templates.js | 67 + assets/static/manifest.json | 89 + assets/templates/base.tmpl | 132 + assets/templates/categories/create_title.tmpl | 8 + assets/templates/categories/form.tmpl | 52 + assets/templates/categories/index.tmpl | 3 + assets/templates/categories/list.tmpl | 85 + assets/templates/categories/list_title.tmpl | 14 + assets/templates/categories/update_title.tmpl | 8 + assets/templates/full.tmpl | 28 + assets/templates/items/add_relation.tmpl | 45 + assets/templates/items/add_to_dashboard.tmpl | 9 + assets/templates/items/all_list.tmpl | 76 + assets/templates/items/all_list_rows.tmpl | 89 + assets/templates/items/all_list_title.tmpl | 9 + assets/templates/items/create_title.tmpl | 5 + assets/templates/items/fields.tmpl | 60 + assets/templates/items/form.tmpl | 254 + assets/templates/items/form_jscode.tmpl | 3 + assets/templates/items/index.tmpl | 3 + assets/templates/items/index_all.tmpl | 3 + assets/templates/items/list.tmpl | 85 + .../templates/items/list_for_relations.tmpl | 61 + assets/templates/items/list_rows.tmpl | 98 + assets/templates/items/list_title.tmpl | 19 + assets/templates/items/read.tmpl | 102 + assets/templates/items/read_title.tmpl | 8 + assets/templates/items/relations.tmpl | 88 + assets/templates/items/relations_view.tmpl | 37 + .../items/remove_from_dashboard.tmpl | 11 + assets/templates/items/share.tmpl | 99 + assets/templates/items/update_title.tmpl | 8 + assets/templates/items/view.tmpl | 76 + assets/templates/notebooks/create_title.tmpl | 8 + assets/templates/notebooks/form.tmpl | 75 + assets/templates/notebooks/index.tmpl | 3 + assets/templates/notebooks/list.tmpl | 84 + assets/templates/notebooks/list_title.tmpl | 14 + assets/templates/notebooks/update_title.tmpl | 8 + .../forgotten-password-confirmation.tmpl | 6 + .../templates/pages/forgotten-password.tmpl | 21 + assets/templates/pages/home.tmpl | 8 + assets/templates/pages/home_items.tmpl | 77 + assets/templates/pages/home_title.tmpl | 8 + assets/templates/pages/login.tmpl | 22 + .../pages/password-reset-confirmation.tmpl | 6 + assets/templates/pages/password-reset.tmpl | 31 + assets/templates/pages/signup.tmpl | 28 + assets/templates/partials/footer.tmpl | 9 + assets/templates/partials/message.tmpl | 16 + assets/templates/partials/nav.tmpl | 15 + assets/templates/partials/notebooks-list.tmpl | 4 + assets/templates/partials/sidebar.tmpl | 128 + assets/templates/partials/types-list.tmpl | 23 + assets/templates/quickbox/add.tmpl | 10 + assets/templates/quickbox/list.tmpl | 24 + assets/templates/quickbox/transform.tmpl | 107 + assets/templates/types/create_title.tmpl | 8 + assets/templates/types/field_new.tmpl | 92 + assets/templates/types/fields.tmpl | 112 + assets/templates/types/form.tmpl | 145 + assets/templates/types/index.tmpl | 3 + assets/templates/types/list.tmpl | 93 + assets/templates/types/list_title.tmpl | 15 + assets/templates/types/update_title.tmpl | 9 + cmd/web/application.go | 110 + cmd/web/categories_handler.go | 273 + cmd/web/config.go | 24 + cmd/web/context.go | 28 + cmd/web/errors.go | 35 + cmd/web/handlers.go | 437 + cmd/web/helpers.go | 63 + cmd/web/items_handlers.go | 918 ++ cmd/web/main.go | 92 + cmd/web/middleware.go | 138 + cmd/web/notebooks_handlers.go | 299 + cmd/web/quickbox_handlers.go | 301 + cmd/web/routes.go | 84 + cmd/web/server.go | 61 + cmd/web/types_handlers.go | 431 + go.mod | 32 + go.sum | 68 + internal/cookies/cookies.go | 150 + internal/database/db.go | 63 + internal/database/password_resets.go | 54 + internal/database/users.go | 79 + internal/env/env.go | 43 + internal/funcs/funcs.go | 488 + internal/password/common.go | 10006 ++++++++++++++++ internal/password/hash.go | 30 + internal/request/forms.go | 46 + internal/request/json.go | 73 + internal/response/json.go | 29 + internal/response/metrics.go | 42 + internal/response/templates.go | 96 + internal/smtp/mailer.go | 102 + internal/token/token.go | 34 + internal/validator/helpers.go | 88 + internal/validator/validator.go | 40 + internal/version/version.go | 5 + models/base.go | 32 + models/category.go | 131 + models/constructors.go | 13 + models/field.go | 168 + models/item.go | 470 + models/notebook.go | 152 + models/quicknote.go | 182 + models/type.go | 231 + models/widget.go | 52 + 2252 files changed, 52566 insertions(+) create mode 100644 .gitignore create mode 100644 assets/efs.go create mode 100644 assets/emails/example.tmpl create mode 100644 assets/emails/forgotten-password.tmpl create mode 100644 assets/jstemplates/items/field-text.handlebars create mode 100644 assets/jstemplates/items/field-url.handlebars create mode 100644 assets/migrations/000001_initalize_schema_migrations.down.sql create mode 100644 assets/migrations/000001_initalize_schema_migrations.up.sql create mode 100644 assets/migrations/000002_create_users_table.down.sql create mode 100644 assets/migrations/000002_create_users_table.up.sql create mode 100644 assets/migrations/000003_create_password_resets_table.down.sql create mode 100644 assets/migrations/000003_create_password_resets_table.up.sql create mode 100644 assets/migrations/000004_create_bm_category_table.down.sql create mode 100644 assets/migrations/000004_create_bm_category_table.up.sql create mode 100644 assets/migrations/000005_create_bm_item_table.down.sql create mode 100644 assets/migrations/000005_create_bm_item_table.up.sql create mode 100644 assets/migrations/000006_create_bm_item_fields_table.down.sql create mode 100644 assets/migrations/000006_create_bm_item_fields_table.up.sql create mode 100644 assets/migrations/000007_create_bm_item_keywords_table.down.sql create mode 100644 assets/migrations/000007_create_bm_item_keywords_table.up.sql create mode 100644 assets/migrations/000008_create_bm_item_relations_table.down.sql create mode 100644 assets/migrations/000008_create_bm_item_relations_table.up.sql create mode 100644 assets/migrations/000009_create_bm_item_notebook_table.down.sql create mode 100644 assets/migrations/000009_create_bm_item_notebook_table.up.sql create mode 100644 assets/migrations/000010_create_bm_quicknote_table.down.sql create mode 100644 assets/migrations/000010_create_bm_quicknote_table.up.sql create mode 100644 assets/migrations/000011_create_bm_type_table.down.sql create mode 100644 assets/migrations/000011_create_bm_type_table.up.sql create mode 100644 assets/migrations/000012_create_bm_type_fields_table.down.sql create mode 100644 assets/migrations/000012_create_bm_type_fields_table.up.sql create mode 100644 assets/migrations/000013_create_bm_widgets_table.down.sql create mode 100644 assets/migrations/000013_create_bm_widgets_table.up.sql create mode 100644 assets/migrations/000014_create_bm_item_shares_table.down.sql create mode 100644 assets/migrations/000014_create_bm_item_shares_table.up.sql create mode 100644 assets/static/bootstrap-icons/0-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/0-circle.svg create mode 100644 assets/static/bootstrap-icons/0-square-fill.svg create mode 100644 assets/static/bootstrap-icons/0-square.svg create mode 100644 assets/static/bootstrap-icons/1-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/1-circle.svg create mode 100644 assets/static/bootstrap-icons/1-square-fill.svg create mode 100644 assets/static/bootstrap-icons/1-square.svg create mode 100644 assets/static/bootstrap-icons/123.svg create mode 100644 assets/static/bootstrap-icons/2-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/2-circle.svg create mode 100644 assets/static/bootstrap-icons/2-square-fill.svg create mode 100644 assets/static/bootstrap-icons/2-square.svg create mode 100644 assets/static/bootstrap-icons/3-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/3-circle.svg create mode 100644 assets/static/bootstrap-icons/3-square-fill.svg create mode 100644 assets/static/bootstrap-icons/3-square.svg create mode 100644 assets/static/bootstrap-icons/4-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/4-circle.svg create mode 100644 assets/static/bootstrap-icons/4-square-fill.svg create mode 100644 assets/static/bootstrap-icons/4-square.svg create mode 100644 assets/static/bootstrap-icons/5-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/5-circle.svg create mode 100644 assets/static/bootstrap-icons/5-square-fill.svg create mode 100644 assets/static/bootstrap-icons/5-square.svg create mode 100644 assets/static/bootstrap-icons/6-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/6-circle.svg create mode 100644 assets/static/bootstrap-icons/6-square-fill.svg create mode 100644 assets/static/bootstrap-icons/6-square.svg create mode 100644 assets/static/bootstrap-icons/7-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/7-circle.svg create mode 100644 assets/static/bootstrap-icons/7-square-fill.svg create mode 100644 assets/static/bootstrap-icons/7-square.svg create mode 100644 assets/static/bootstrap-icons/8-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/8-circle.svg create mode 100644 assets/static/bootstrap-icons/8-square-fill.svg create mode 100644 assets/static/bootstrap-icons/8-square.svg create mode 100644 assets/static/bootstrap-icons/9-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/9-circle.svg create mode 100644 assets/static/bootstrap-icons/9-square-fill.svg create mode 100644 assets/static/bootstrap-icons/9-square.svg create mode 100644 assets/static/bootstrap-icons/activity.svg create mode 100644 assets/static/bootstrap-icons/airplane-engines-fill.svg create mode 100644 assets/static/bootstrap-icons/airplane-engines.svg create mode 100644 assets/static/bootstrap-icons/airplane-fill.svg create mode 100644 assets/static/bootstrap-icons/airplane.svg create mode 100644 assets/static/bootstrap-icons/alarm-fill.svg create mode 100644 assets/static/bootstrap-icons/alarm.svg create mode 100644 assets/static/bootstrap-icons/alexa.svg create mode 100644 assets/static/bootstrap-icons/align-bottom.svg create mode 100644 assets/static/bootstrap-icons/align-center.svg create mode 100644 assets/static/bootstrap-icons/align-end.svg create mode 100644 assets/static/bootstrap-icons/align-middle.svg create mode 100644 assets/static/bootstrap-icons/align-start.svg create mode 100644 assets/static/bootstrap-icons/align-top.svg create mode 100644 assets/static/bootstrap-icons/alipay.svg create mode 100644 assets/static/bootstrap-icons/alphabet-uppercase.svg create mode 100644 assets/static/bootstrap-icons/alphabet.svg create mode 100644 assets/static/bootstrap-icons/alt.svg create mode 100644 assets/static/bootstrap-icons/amazon.svg create mode 100644 assets/static/bootstrap-icons/amd.svg create mode 100644 assets/static/bootstrap-icons/android.svg create mode 100644 assets/static/bootstrap-icons/android2.svg create mode 100644 assets/static/bootstrap-icons/app-indicator.svg create mode 100644 assets/static/bootstrap-icons/app.svg create mode 100644 assets/static/bootstrap-icons/apple.svg create mode 100644 assets/static/bootstrap-icons/archive-fill.svg create mode 100644 assets/static/bootstrap-icons/archive.svg create mode 100644 assets/static/bootstrap-icons/arrow-90deg-down.svg create mode 100644 assets/static/bootstrap-icons/arrow-90deg-left.svg create mode 100644 assets/static/bootstrap-icons/arrow-90deg-right.svg create mode 100644 assets/static/bootstrap-icons/arrow-90deg-up.svg create mode 100644 assets/static/bootstrap-icons/arrow-bar-down.svg create mode 100644 assets/static/bootstrap-icons/arrow-bar-left.svg create mode 100644 assets/static/bootstrap-icons/arrow-bar-right.svg create mode 100644 assets/static/bootstrap-icons/arrow-bar-up.svg create mode 100644 assets/static/bootstrap-icons/arrow-clockwise.svg create mode 100644 assets/static/bootstrap-icons/arrow-counterclockwise.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-circle.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-left-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-left-circle.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-left-square-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-left-square.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-left.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-right-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-right-circle.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-right-square-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-right-square.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-right.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-short.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-square-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-square.svg create mode 100644 assets/static/bootstrap-icons/arrow-down-up.svg create mode 100644 assets/static/bootstrap-icons/arrow-down.svg create mode 100644 assets/static/bootstrap-icons/arrow-left-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-left-circle.svg create mode 100644 assets/static/bootstrap-icons/arrow-left-right.svg create mode 100644 assets/static/bootstrap-icons/arrow-left-short.svg create mode 100644 assets/static/bootstrap-icons/arrow-left-square-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-left-square.svg create mode 100644 assets/static/bootstrap-icons/arrow-left.svg create mode 100644 assets/static/bootstrap-icons/arrow-repeat.svg create mode 100644 assets/static/bootstrap-icons/arrow-return-left.svg create mode 100644 assets/static/bootstrap-icons/arrow-return-right.svg create mode 100644 assets/static/bootstrap-icons/arrow-right-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-right-circle.svg create mode 100644 assets/static/bootstrap-icons/arrow-right-short.svg create mode 100644 assets/static/bootstrap-icons/arrow-right-square-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-right-square.svg create mode 100644 assets/static/bootstrap-icons/arrow-right.svg create mode 100644 assets/static/bootstrap-icons/arrow-through-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-through-heart.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-circle.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-left-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-left-circle.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-left-square-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-left-square.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-left.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-right-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-right-circle.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-right-square-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-right-square.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-right.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-short.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-square-fill.svg create mode 100644 assets/static/bootstrap-icons/arrow-up-square.svg create mode 100644 assets/static/bootstrap-icons/arrow-up.svg create mode 100644 assets/static/bootstrap-icons/arrows-angle-contract.svg create mode 100644 assets/static/bootstrap-icons/arrows-angle-expand.svg create mode 100644 assets/static/bootstrap-icons/arrows-collapse-vertical.svg create mode 100644 assets/static/bootstrap-icons/arrows-collapse.svg create mode 100644 assets/static/bootstrap-icons/arrows-expand-vertical.svg create mode 100644 assets/static/bootstrap-icons/arrows-expand.svg create mode 100644 assets/static/bootstrap-icons/arrows-fullscreen.svg create mode 100644 assets/static/bootstrap-icons/arrows-move.svg create mode 100644 assets/static/bootstrap-icons/arrows-vertical.svg create mode 100644 assets/static/bootstrap-icons/arrows.svg create mode 100644 assets/static/bootstrap-icons/aspect-ratio-fill.svg create mode 100644 assets/static/bootstrap-icons/aspect-ratio.svg create mode 100644 assets/static/bootstrap-icons/asterisk.svg create mode 100644 assets/static/bootstrap-icons/at.svg create mode 100644 assets/static/bootstrap-icons/award-fill.svg create mode 100644 assets/static/bootstrap-icons/award.svg create mode 100644 assets/static/bootstrap-icons/back.svg create mode 100644 assets/static/bootstrap-icons/backpack-fill.svg create mode 100644 assets/static/bootstrap-icons/backpack.svg create mode 100644 assets/static/bootstrap-icons/backpack2-fill.svg create mode 100644 assets/static/bootstrap-icons/backpack2.svg create mode 100644 assets/static/bootstrap-icons/backpack3-fill.svg create mode 100644 assets/static/bootstrap-icons/backpack3.svg create mode 100644 assets/static/bootstrap-icons/backpack4-fill.svg create mode 100644 assets/static/bootstrap-icons/backpack4.svg create mode 100644 assets/static/bootstrap-icons/backspace-fill.svg create mode 100644 assets/static/bootstrap-icons/backspace-reverse-fill.svg create mode 100644 assets/static/bootstrap-icons/backspace-reverse.svg create mode 100644 assets/static/bootstrap-icons/backspace.svg create mode 100644 assets/static/bootstrap-icons/badge-3d-fill.svg create mode 100644 assets/static/bootstrap-icons/badge-3d.svg create mode 100644 assets/static/bootstrap-icons/badge-4k-fill.svg create mode 100644 assets/static/bootstrap-icons/badge-4k.svg create mode 100644 assets/static/bootstrap-icons/badge-8k-fill.svg create mode 100644 assets/static/bootstrap-icons/badge-8k.svg create mode 100644 assets/static/bootstrap-icons/badge-ad-fill.svg create mode 100644 assets/static/bootstrap-icons/badge-ad.svg create mode 100644 assets/static/bootstrap-icons/badge-ar-fill.svg create mode 100644 assets/static/bootstrap-icons/badge-ar.svg create mode 100644 assets/static/bootstrap-icons/badge-cc-fill.svg create mode 100644 assets/static/bootstrap-icons/badge-cc.svg create mode 100644 assets/static/bootstrap-icons/badge-hd-fill.svg create mode 100644 assets/static/bootstrap-icons/badge-hd.svg create mode 100644 assets/static/bootstrap-icons/badge-sd-fill.svg create mode 100644 assets/static/bootstrap-icons/badge-sd.svg create mode 100644 assets/static/bootstrap-icons/badge-tm-fill.svg create mode 100644 assets/static/bootstrap-icons/badge-tm.svg create mode 100644 assets/static/bootstrap-icons/badge-vo-fill.svg create mode 100644 assets/static/bootstrap-icons/badge-vo.svg create mode 100644 assets/static/bootstrap-icons/badge-vr-fill.svg create mode 100644 assets/static/bootstrap-icons/badge-vr.svg create mode 100644 assets/static/bootstrap-icons/badge-wc-fill.svg create mode 100644 assets/static/bootstrap-icons/badge-wc.svg create mode 100644 assets/static/bootstrap-icons/bag-check-fill.svg create mode 100644 assets/static/bootstrap-icons/bag-check.svg create mode 100644 assets/static/bootstrap-icons/bag-dash-fill.svg create mode 100644 assets/static/bootstrap-icons/bag-dash.svg create mode 100644 assets/static/bootstrap-icons/bag-fill.svg create mode 100644 assets/static/bootstrap-icons/bag-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/bag-heart.svg create mode 100644 assets/static/bootstrap-icons/bag-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/bag-plus.svg create mode 100644 assets/static/bootstrap-icons/bag-x-fill.svg create mode 100644 assets/static/bootstrap-icons/bag-x.svg create mode 100644 assets/static/bootstrap-icons/bag.svg create mode 100644 assets/static/bootstrap-icons/balloon-fill.svg create mode 100644 assets/static/bootstrap-icons/balloon-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/balloon-heart.svg create mode 100644 assets/static/bootstrap-icons/balloon.svg create mode 100644 assets/static/bootstrap-icons/ban-fill.svg create mode 100644 assets/static/bootstrap-icons/ban.svg create mode 100644 assets/static/bootstrap-icons/bandaid-fill.svg create mode 100644 assets/static/bootstrap-icons/bandaid.svg create mode 100644 assets/static/bootstrap-icons/bank.svg create mode 100644 assets/static/bootstrap-icons/bank2.svg create mode 100644 assets/static/bootstrap-icons/bar-chart-fill.svg create mode 100644 assets/static/bootstrap-icons/bar-chart-line-fill.svg create mode 100644 assets/static/bootstrap-icons/bar-chart-line.svg create mode 100644 assets/static/bootstrap-icons/bar-chart-steps.svg create mode 100644 assets/static/bootstrap-icons/bar-chart.svg create mode 100644 assets/static/bootstrap-icons/basket-fill.svg create mode 100644 assets/static/bootstrap-icons/basket.svg create mode 100644 assets/static/bootstrap-icons/basket2-fill.svg create mode 100644 assets/static/bootstrap-icons/basket2.svg create mode 100644 assets/static/bootstrap-icons/basket3-fill.svg create mode 100644 assets/static/bootstrap-icons/basket3.svg create mode 100644 assets/static/bootstrap-icons/battery-charging.svg create mode 100644 assets/static/bootstrap-icons/battery-full.svg create mode 100644 assets/static/bootstrap-icons/battery-half.svg create mode 100644 assets/static/bootstrap-icons/battery.svg create mode 100644 assets/static/bootstrap-icons/behance.svg create mode 100644 assets/static/bootstrap-icons/bell-fill.svg create mode 100644 assets/static/bootstrap-icons/bell-slash-fill.svg create mode 100644 assets/static/bootstrap-icons/bell-slash.svg create mode 100644 assets/static/bootstrap-icons/bell.svg create mode 100644 assets/static/bootstrap-icons/bezier.svg create mode 100644 assets/static/bootstrap-icons/bezier2.svg create mode 100644 assets/static/bootstrap-icons/bicycle.svg create mode 100644 assets/static/bootstrap-icons/bing.svg create mode 100644 assets/static/bootstrap-icons/binoculars-fill.svg create mode 100644 assets/static/bootstrap-icons/binoculars.svg create mode 100644 assets/static/bootstrap-icons/blockquote-left.svg create mode 100644 assets/static/bootstrap-icons/blockquote-right.svg create mode 100644 assets/static/bootstrap-icons/bluetooth.svg create mode 100644 assets/static/bootstrap-icons/body-text.svg create mode 100644 assets/static/bootstrap-icons/book-fill.svg create mode 100644 assets/static/bootstrap-icons/book-half.svg create mode 100644 assets/static/bootstrap-icons/book.svg create mode 100644 assets/static/bootstrap-icons/bookmark-check-fill.svg create mode 100644 assets/static/bootstrap-icons/bookmark-check.svg create mode 100644 assets/static/bootstrap-icons/bookmark-dash-fill.svg create mode 100644 assets/static/bootstrap-icons/bookmark-dash.svg create mode 100644 assets/static/bootstrap-icons/bookmark-fill.svg create mode 100644 assets/static/bootstrap-icons/bookmark-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/bookmark-heart.svg create mode 100644 assets/static/bootstrap-icons/bookmark-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/bookmark-plus.svg create mode 100644 assets/static/bootstrap-icons/bookmark-star-fill.svg create mode 100644 assets/static/bootstrap-icons/bookmark-star.svg create mode 100644 assets/static/bootstrap-icons/bookmark-x-fill.svg create mode 100644 assets/static/bootstrap-icons/bookmark-x.svg create mode 100644 assets/static/bootstrap-icons/bookmark.svg create mode 100644 assets/static/bootstrap-icons/bookmarks-fill.svg create mode 100644 assets/static/bootstrap-icons/bookmarks.svg create mode 100644 assets/static/bootstrap-icons/bookshelf.svg create mode 100644 assets/static/bootstrap-icons/boombox-fill.svg create mode 100644 assets/static/bootstrap-icons/boombox.svg create mode 100644 assets/static/bootstrap-icons/bootstrap-fill.svg create mode 100644 assets/static/bootstrap-icons/bootstrap-icons.svg create mode 100644 assets/static/bootstrap-icons/bootstrap-reboot.svg create mode 100644 assets/static/bootstrap-icons/bootstrap.svg create mode 100644 assets/static/bootstrap-icons/border-all.svg create mode 100644 assets/static/bootstrap-icons/border-bottom.svg create mode 100644 assets/static/bootstrap-icons/border-center.svg create mode 100644 assets/static/bootstrap-icons/border-inner.svg create mode 100644 assets/static/bootstrap-icons/border-left.svg create mode 100644 assets/static/bootstrap-icons/border-middle.svg create mode 100644 assets/static/bootstrap-icons/border-outer.svg create mode 100644 assets/static/bootstrap-icons/border-right.svg create mode 100644 assets/static/bootstrap-icons/border-style.svg create mode 100644 assets/static/bootstrap-icons/border-top.svg create mode 100644 assets/static/bootstrap-icons/border-width.svg create mode 100644 assets/static/bootstrap-icons/border.svg create mode 100644 assets/static/bootstrap-icons/bounding-box-circles.svg create mode 100644 assets/static/bootstrap-icons/bounding-box.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-down-left.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-down-right.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-down.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-in-down-left.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-in-down-right.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-in-down.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-in-left.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-in-right.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-in-up-left.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-in-up-right.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-in-up.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-left.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-right.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-up-left.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-up-right.svg create mode 100644 assets/static/bootstrap-icons/box-arrow-up.svg create mode 100644 assets/static/bootstrap-icons/box-fill.svg create mode 100644 assets/static/bootstrap-icons/box-seam-fill.svg create mode 100644 assets/static/bootstrap-icons/box-seam.svg create mode 100644 assets/static/bootstrap-icons/box.svg create mode 100644 assets/static/bootstrap-icons/box2-fill.svg create mode 100644 assets/static/bootstrap-icons/box2-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/box2-heart.svg create mode 100644 assets/static/bootstrap-icons/box2.svg create mode 100644 assets/static/bootstrap-icons/boxes.svg create mode 100644 assets/static/bootstrap-icons/braces-asterisk.svg create mode 100644 assets/static/bootstrap-icons/braces.svg create mode 100644 assets/static/bootstrap-icons/bricks.svg create mode 100644 assets/static/bootstrap-icons/briefcase-fill.svg create mode 100644 assets/static/bootstrap-icons/briefcase.svg create mode 100644 assets/static/bootstrap-icons/brightness-alt-high-fill.svg create mode 100644 assets/static/bootstrap-icons/brightness-alt-high.svg create mode 100644 assets/static/bootstrap-icons/brightness-alt-low-fill.svg create mode 100644 assets/static/bootstrap-icons/brightness-alt-low.svg create mode 100644 assets/static/bootstrap-icons/brightness-high-fill.svg create mode 100644 assets/static/bootstrap-icons/brightness-high.svg create mode 100644 assets/static/bootstrap-icons/brightness-low-fill.svg create mode 100644 assets/static/bootstrap-icons/brightness-low.svg create mode 100644 assets/static/bootstrap-icons/brilliance.svg create mode 100644 assets/static/bootstrap-icons/broadcast-pin.svg create mode 100644 assets/static/bootstrap-icons/broadcast.svg create mode 100644 assets/static/bootstrap-icons/browser-chrome.svg create mode 100644 assets/static/bootstrap-icons/browser-edge.svg create mode 100644 assets/static/bootstrap-icons/browser-firefox.svg create mode 100644 assets/static/bootstrap-icons/browser-safari.svg create mode 100644 assets/static/bootstrap-icons/brush-fill.svg create mode 100644 assets/static/bootstrap-icons/brush.svg create mode 100644 assets/static/bootstrap-icons/bucket-fill.svg create mode 100644 assets/static/bootstrap-icons/bucket.svg create mode 100644 assets/static/bootstrap-icons/bug-fill.svg create mode 100644 assets/static/bootstrap-icons/bug.svg create mode 100644 assets/static/bootstrap-icons/building-add.svg create mode 100644 assets/static/bootstrap-icons/building-check.svg create mode 100644 assets/static/bootstrap-icons/building-dash.svg create mode 100644 assets/static/bootstrap-icons/building-down.svg create mode 100644 assets/static/bootstrap-icons/building-exclamation.svg create mode 100644 assets/static/bootstrap-icons/building-fill-add.svg create mode 100644 assets/static/bootstrap-icons/building-fill-check.svg create mode 100644 assets/static/bootstrap-icons/building-fill-dash.svg create mode 100644 assets/static/bootstrap-icons/building-fill-down.svg create mode 100644 assets/static/bootstrap-icons/building-fill-exclamation.svg create mode 100644 assets/static/bootstrap-icons/building-fill-gear.svg create mode 100644 assets/static/bootstrap-icons/building-fill-lock.svg create mode 100644 assets/static/bootstrap-icons/building-fill-slash.svg create mode 100644 assets/static/bootstrap-icons/building-fill-up.svg create mode 100644 assets/static/bootstrap-icons/building-fill-x.svg create mode 100644 assets/static/bootstrap-icons/building-fill.svg create mode 100644 assets/static/bootstrap-icons/building-gear.svg create mode 100644 assets/static/bootstrap-icons/building-lock.svg create mode 100644 assets/static/bootstrap-icons/building-slash.svg create mode 100644 assets/static/bootstrap-icons/building-up.svg create mode 100644 assets/static/bootstrap-icons/building-x.svg create mode 100644 assets/static/bootstrap-icons/building.svg create mode 100644 assets/static/bootstrap-icons/buildings-fill.svg create mode 100644 assets/static/bootstrap-icons/buildings.svg create mode 100644 assets/static/bootstrap-icons/bullseye.svg create mode 100644 assets/static/bootstrap-icons/bus-front-fill.svg create mode 100644 assets/static/bootstrap-icons/bus-front.svg create mode 100644 assets/static/bootstrap-icons/c-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/c-circle.svg create mode 100644 assets/static/bootstrap-icons/c-square-fill.svg create mode 100644 assets/static/bootstrap-icons/c-square.svg create mode 100644 assets/static/bootstrap-icons/cake-fill.svg create mode 100644 assets/static/bootstrap-icons/cake.svg create mode 100644 assets/static/bootstrap-icons/cake2-fill.svg create mode 100644 assets/static/bootstrap-icons/cake2.svg create mode 100644 assets/static/bootstrap-icons/calculator-fill.svg create mode 100644 assets/static/bootstrap-icons/calculator.svg create mode 100644 assets/static/bootstrap-icons/calendar-check-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar-check.svg create mode 100644 assets/static/bootstrap-icons/calendar-date-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar-date.svg create mode 100644 assets/static/bootstrap-icons/calendar-day-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar-day.svg create mode 100644 assets/static/bootstrap-icons/calendar-event-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar-event.svg create mode 100644 assets/static/bootstrap-icons/calendar-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar-heart.svg create mode 100644 assets/static/bootstrap-icons/calendar-minus-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar-minus.svg create mode 100644 assets/static/bootstrap-icons/calendar-month-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar-month.svg create mode 100644 assets/static/bootstrap-icons/calendar-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar-plus.svg create mode 100644 assets/static/bootstrap-icons/calendar-range-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar-range.svg create mode 100644 assets/static/bootstrap-icons/calendar-week-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar-week.svg create mode 100644 assets/static/bootstrap-icons/calendar-x-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar-x.svg create mode 100644 assets/static/bootstrap-icons/calendar.svg create mode 100644 assets/static/bootstrap-icons/calendar2-check-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar2-check.svg create mode 100644 assets/static/bootstrap-icons/calendar2-date-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar2-date.svg create mode 100644 assets/static/bootstrap-icons/calendar2-day-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar2-day.svg create mode 100644 assets/static/bootstrap-icons/calendar2-event-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar2-event.svg create mode 100644 assets/static/bootstrap-icons/calendar2-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar2-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar2-heart.svg create mode 100644 assets/static/bootstrap-icons/calendar2-minus-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar2-minus.svg create mode 100644 assets/static/bootstrap-icons/calendar2-month-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar2-month.svg create mode 100644 assets/static/bootstrap-icons/calendar2-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar2-plus.svg create mode 100644 assets/static/bootstrap-icons/calendar2-range-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar2-range.svg create mode 100644 assets/static/bootstrap-icons/calendar2-week-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar2-week.svg create mode 100644 assets/static/bootstrap-icons/calendar2-x-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar2-x.svg create mode 100644 assets/static/bootstrap-icons/calendar2.svg create mode 100644 assets/static/bootstrap-icons/calendar3-event-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar3-event.svg create mode 100644 assets/static/bootstrap-icons/calendar3-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar3-range-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar3-range.svg create mode 100644 assets/static/bootstrap-icons/calendar3-week-fill.svg create mode 100644 assets/static/bootstrap-icons/calendar3-week.svg create mode 100644 assets/static/bootstrap-icons/calendar3.svg create mode 100644 assets/static/bootstrap-icons/calendar4-event.svg create mode 100644 assets/static/bootstrap-icons/calendar4-range.svg create mode 100644 assets/static/bootstrap-icons/calendar4-week.svg create mode 100644 assets/static/bootstrap-icons/calendar4.svg create mode 100644 assets/static/bootstrap-icons/camera-fill.svg create mode 100644 assets/static/bootstrap-icons/camera-reels-fill.svg create mode 100644 assets/static/bootstrap-icons/camera-reels.svg create mode 100644 assets/static/bootstrap-icons/camera-video-fill.svg create mode 100644 assets/static/bootstrap-icons/camera-video-off-fill.svg create mode 100644 assets/static/bootstrap-icons/camera-video-off.svg create mode 100644 assets/static/bootstrap-icons/camera-video.svg create mode 100644 assets/static/bootstrap-icons/camera.svg create mode 100644 assets/static/bootstrap-icons/camera2.svg create mode 100644 assets/static/bootstrap-icons/capslock-fill.svg create mode 100644 assets/static/bootstrap-icons/capslock.svg create mode 100644 assets/static/bootstrap-icons/capsule-pill.svg create mode 100644 assets/static/bootstrap-icons/capsule.svg create mode 100644 assets/static/bootstrap-icons/car-front-fill.svg create mode 100644 assets/static/bootstrap-icons/car-front.svg create mode 100644 assets/static/bootstrap-icons/card-checklist.svg create mode 100644 assets/static/bootstrap-icons/card-heading.svg create mode 100644 assets/static/bootstrap-icons/card-image.svg create mode 100644 assets/static/bootstrap-icons/card-list.svg create mode 100644 assets/static/bootstrap-icons/card-text.svg create mode 100644 assets/static/bootstrap-icons/caret-down-fill.svg create mode 100644 assets/static/bootstrap-icons/caret-down-square-fill.svg create mode 100644 assets/static/bootstrap-icons/caret-down-square.svg create mode 100644 assets/static/bootstrap-icons/caret-down.svg create mode 100644 assets/static/bootstrap-icons/caret-left-fill.svg create mode 100644 assets/static/bootstrap-icons/caret-left-square-fill.svg create mode 100644 assets/static/bootstrap-icons/caret-left-square.svg create mode 100644 assets/static/bootstrap-icons/caret-left.svg create mode 100644 assets/static/bootstrap-icons/caret-right-fill.svg create mode 100644 assets/static/bootstrap-icons/caret-right-square-fill.svg create mode 100644 assets/static/bootstrap-icons/caret-right-square.svg create mode 100644 assets/static/bootstrap-icons/caret-right.svg create mode 100644 assets/static/bootstrap-icons/caret-up-fill.svg create mode 100644 assets/static/bootstrap-icons/caret-up-square-fill.svg create mode 100644 assets/static/bootstrap-icons/caret-up-square.svg create mode 100644 assets/static/bootstrap-icons/caret-up.svg create mode 100644 assets/static/bootstrap-icons/cart-check-fill.svg create mode 100644 assets/static/bootstrap-icons/cart-check.svg create mode 100644 assets/static/bootstrap-icons/cart-dash-fill.svg create mode 100644 assets/static/bootstrap-icons/cart-dash.svg create mode 100644 assets/static/bootstrap-icons/cart-fill.svg create mode 100644 assets/static/bootstrap-icons/cart-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/cart-plus.svg create mode 100644 assets/static/bootstrap-icons/cart-x-fill.svg create mode 100644 assets/static/bootstrap-icons/cart-x.svg create mode 100644 assets/static/bootstrap-icons/cart.svg create mode 100644 assets/static/bootstrap-icons/cart2.svg create mode 100644 assets/static/bootstrap-icons/cart3.svg create mode 100644 assets/static/bootstrap-icons/cart4.svg create mode 100644 assets/static/bootstrap-icons/cash-coin.svg create mode 100644 assets/static/bootstrap-icons/cash-stack.svg create mode 100644 assets/static/bootstrap-icons/cash.svg create mode 100644 assets/static/bootstrap-icons/cassette-fill.svg create mode 100644 assets/static/bootstrap-icons/cassette.svg create mode 100644 assets/static/bootstrap-icons/cast.svg create mode 100644 assets/static/bootstrap-icons/cc-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/cc-circle.svg create mode 100644 assets/static/bootstrap-icons/cc-square-fill.svg create mode 100644 assets/static/bootstrap-icons/cc-square.svg create mode 100644 assets/static/bootstrap-icons/chat-dots-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-dots.svg create mode 100644 assets/static/bootstrap-icons/chat-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-heart.svg create mode 100644 assets/static/bootstrap-icons/chat-left-dots-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-left-dots.svg create mode 100644 assets/static/bootstrap-icons/chat-left-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-left-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-left-heart.svg create mode 100644 assets/static/bootstrap-icons/chat-left-quote-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-left-quote.svg create mode 100644 assets/static/bootstrap-icons/chat-left-text-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-left-text.svg create mode 100644 assets/static/bootstrap-icons/chat-left.svg create mode 100644 assets/static/bootstrap-icons/chat-quote-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-quote.svg create mode 100644 assets/static/bootstrap-icons/chat-right-dots-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-right-dots.svg create mode 100644 assets/static/bootstrap-icons/chat-right-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-right-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-right-heart.svg create mode 100644 assets/static/bootstrap-icons/chat-right-quote-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-right-quote.svg create mode 100644 assets/static/bootstrap-icons/chat-right-text-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-right-text.svg create mode 100644 assets/static/bootstrap-icons/chat-right.svg create mode 100644 assets/static/bootstrap-icons/chat-square-dots-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-square-dots.svg create mode 100644 assets/static/bootstrap-icons/chat-square-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-square-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-square-heart.svg create mode 100644 assets/static/bootstrap-icons/chat-square-quote-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-square-quote.svg create mode 100644 assets/static/bootstrap-icons/chat-square-text-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-square-text.svg create mode 100644 assets/static/bootstrap-icons/chat-square.svg create mode 100644 assets/static/bootstrap-icons/chat-text-fill.svg create mode 100644 assets/static/bootstrap-icons/chat-text.svg create mode 100644 assets/static/bootstrap-icons/chat.svg create mode 100644 assets/static/bootstrap-icons/check-all.svg create mode 100644 assets/static/bootstrap-icons/check-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/check-circle.svg create mode 100644 assets/static/bootstrap-icons/check-lg.svg create mode 100644 assets/static/bootstrap-icons/check-square-fill.svg create mode 100644 assets/static/bootstrap-icons/check-square.svg create mode 100644 assets/static/bootstrap-icons/check.svg create mode 100644 assets/static/bootstrap-icons/check2-all.svg create mode 100644 assets/static/bootstrap-icons/check2-circle.svg create mode 100644 assets/static/bootstrap-icons/check2-square.svg create mode 100644 assets/static/bootstrap-icons/check2.svg create mode 100644 assets/static/bootstrap-icons/chevron-bar-contract.svg create mode 100644 assets/static/bootstrap-icons/chevron-bar-down.svg create mode 100644 assets/static/bootstrap-icons/chevron-bar-expand.svg create mode 100644 assets/static/bootstrap-icons/chevron-bar-left.svg create mode 100644 assets/static/bootstrap-icons/chevron-bar-right.svg create mode 100644 assets/static/bootstrap-icons/chevron-bar-up.svg create mode 100644 assets/static/bootstrap-icons/chevron-compact-down.svg create mode 100644 assets/static/bootstrap-icons/chevron-compact-left.svg create mode 100644 assets/static/bootstrap-icons/chevron-compact-right.svg create mode 100644 assets/static/bootstrap-icons/chevron-compact-up.svg create mode 100644 assets/static/bootstrap-icons/chevron-contract.svg create mode 100644 assets/static/bootstrap-icons/chevron-double-down.svg create mode 100644 assets/static/bootstrap-icons/chevron-double-left.svg create mode 100644 assets/static/bootstrap-icons/chevron-double-right.svg create mode 100644 assets/static/bootstrap-icons/chevron-double-up.svg create mode 100644 assets/static/bootstrap-icons/chevron-down.svg create mode 100644 assets/static/bootstrap-icons/chevron-expand.svg create mode 100644 assets/static/bootstrap-icons/chevron-left.svg create mode 100644 assets/static/bootstrap-icons/chevron-right.svg create mode 100644 assets/static/bootstrap-icons/chevron-up.svg create mode 100644 assets/static/bootstrap-icons/circle-fill.svg create mode 100644 assets/static/bootstrap-icons/circle-half.svg create mode 100644 assets/static/bootstrap-icons/circle-square.svg create mode 100644 assets/static/bootstrap-icons/circle.svg create mode 100644 assets/static/bootstrap-icons/clipboard-check-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard-check.svg create mode 100644 assets/static/bootstrap-icons/clipboard-data-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard-data.svg create mode 100644 assets/static/bootstrap-icons/clipboard-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard-heart.svg create mode 100644 assets/static/bootstrap-icons/clipboard-minus-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard-minus.svg create mode 100644 assets/static/bootstrap-icons/clipboard-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard-plus.svg create mode 100644 assets/static/bootstrap-icons/clipboard-pulse.svg create mode 100644 assets/static/bootstrap-icons/clipboard-x-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard-x.svg create mode 100644 assets/static/bootstrap-icons/clipboard.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-check-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-check.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-data-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-data.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-heart.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-minus-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-minus.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-plus.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-pulse-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-pulse.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-x-fill.svg create mode 100644 assets/static/bootstrap-icons/clipboard2-x.svg create mode 100644 assets/static/bootstrap-icons/clipboard2.svg create mode 100644 assets/static/bootstrap-icons/clock-fill.svg create mode 100644 assets/static/bootstrap-icons/clock-history.svg create mode 100644 assets/static/bootstrap-icons/clock.svg create mode 100644 assets/static/bootstrap-icons/cloud-arrow-down-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-arrow-down.svg create mode 100644 assets/static/bootstrap-icons/cloud-arrow-up-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-arrow-up.svg create mode 100644 assets/static/bootstrap-icons/cloud-check-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-check.svg create mode 100644 assets/static/bootstrap-icons/cloud-download-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-download.svg create mode 100644 assets/static/bootstrap-icons/cloud-drizzle-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-drizzle.svg create mode 100644 assets/static/bootstrap-icons/cloud-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-fog-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-fog.svg create mode 100644 assets/static/bootstrap-icons/cloud-fog2-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-fog2.svg create mode 100644 assets/static/bootstrap-icons/cloud-hail-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-hail.svg create mode 100644 assets/static/bootstrap-icons/cloud-haze-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-haze.svg create mode 100644 assets/static/bootstrap-icons/cloud-haze2-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-haze2.svg create mode 100644 assets/static/bootstrap-icons/cloud-lightning-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-lightning-rain-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-lightning-rain.svg create mode 100644 assets/static/bootstrap-icons/cloud-lightning.svg create mode 100644 assets/static/bootstrap-icons/cloud-minus-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-minus.svg create mode 100644 assets/static/bootstrap-icons/cloud-moon-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-moon.svg create mode 100644 assets/static/bootstrap-icons/cloud-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-plus.svg create mode 100644 assets/static/bootstrap-icons/cloud-rain-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-rain-heavy-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-rain-heavy.svg create mode 100644 assets/static/bootstrap-icons/cloud-rain.svg create mode 100644 assets/static/bootstrap-icons/cloud-slash-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-slash.svg create mode 100644 assets/static/bootstrap-icons/cloud-sleet-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-sleet.svg create mode 100644 assets/static/bootstrap-icons/cloud-snow-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-snow.svg create mode 100644 assets/static/bootstrap-icons/cloud-sun-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-sun.svg create mode 100644 assets/static/bootstrap-icons/cloud-upload-fill.svg create mode 100644 assets/static/bootstrap-icons/cloud-upload.svg create mode 100644 assets/static/bootstrap-icons/cloud.svg create mode 100644 assets/static/bootstrap-icons/clouds-fill.svg create mode 100644 assets/static/bootstrap-icons/clouds.svg create mode 100644 assets/static/bootstrap-icons/cloudy-fill.svg create mode 100644 assets/static/bootstrap-icons/cloudy.svg create mode 100644 assets/static/bootstrap-icons/code-slash.svg create mode 100644 assets/static/bootstrap-icons/code-square.svg create mode 100644 assets/static/bootstrap-icons/code.svg create mode 100644 assets/static/bootstrap-icons/coin.svg create mode 100644 assets/static/bootstrap-icons/collection-fill.svg create mode 100644 assets/static/bootstrap-icons/collection-play-fill.svg create mode 100644 assets/static/bootstrap-icons/collection-play.svg create mode 100644 assets/static/bootstrap-icons/collection.svg create mode 100644 assets/static/bootstrap-icons/columns-gap.svg create mode 100644 assets/static/bootstrap-icons/columns.svg create mode 100644 assets/static/bootstrap-icons/command.svg create mode 100644 assets/static/bootstrap-icons/compass-fill.svg create mode 100644 assets/static/bootstrap-icons/compass.svg create mode 100644 assets/static/bootstrap-icons/cone-striped.svg create mode 100644 assets/static/bootstrap-icons/cone.svg create mode 100644 assets/static/bootstrap-icons/controller.svg create mode 100644 assets/static/bootstrap-icons/cookie.svg create mode 100644 assets/static/bootstrap-icons/copy.svg create mode 100644 assets/static/bootstrap-icons/cpu-fill.svg create mode 100644 assets/static/bootstrap-icons/cpu.svg create mode 100644 assets/static/bootstrap-icons/credit-card-2-back-fill.svg create mode 100644 assets/static/bootstrap-icons/credit-card-2-back.svg create mode 100644 assets/static/bootstrap-icons/credit-card-2-front-fill.svg create mode 100644 assets/static/bootstrap-icons/credit-card-2-front.svg create mode 100644 assets/static/bootstrap-icons/credit-card-fill.svg create mode 100644 assets/static/bootstrap-icons/credit-card.svg create mode 100644 assets/static/bootstrap-icons/crop.svg create mode 100644 assets/static/bootstrap-icons/crosshair.svg create mode 100644 assets/static/bootstrap-icons/crosshair2.svg create mode 100644 assets/static/bootstrap-icons/cup-fill.svg create mode 100644 assets/static/bootstrap-icons/cup-hot-fill.svg create mode 100644 assets/static/bootstrap-icons/cup-hot.svg create mode 100644 assets/static/bootstrap-icons/cup-straw.svg create mode 100644 assets/static/bootstrap-icons/cup.svg create mode 100644 assets/static/bootstrap-icons/currency-bitcoin.svg create mode 100644 assets/static/bootstrap-icons/currency-dollar.svg create mode 100644 assets/static/bootstrap-icons/currency-euro.svg create mode 100644 assets/static/bootstrap-icons/currency-exchange.svg create mode 100644 assets/static/bootstrap-icons/currency-pound.svg create mode 100644 assets/static/bootstrap-icons/currency-rupee.svg create mode 100644 assets/static/bootstrap-icons/currency-yen.svg create mode 100644 assets/static/bootstrap-icons/cursor-fill.svg create mode 100644 assets/static/bootstrap-icons/cursor-text.svg create mode 100644 assets/static/bootstrap-icons/cursor.svg create mode 100644 assets/static/bootstrap-icons/dash-circle-dotted.svg create mode 100644 assets/static/bootstrap-icons/dash-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/dash-circle.svg create mode 100644 assets/static/bootstrap-icons/dash-lg.svg create mode 100644 assets/static/bootstrap-icons/dash-square-dotted.svg create mode 100644 assets/static/bootstrap-icons/dash-square-fill.svg create mode 100644 assets/static/bootstrap-icons/dash-square.svg create mode 100644 assets/static/bootstrap-icons/dash.svg create mode 100644 assets/static/bootstrap-icons/database-add.svg create mode 100644 assets/static/bootstrap-icons/database-check.svg create mode 100644 assets/static/bootstrap-icons/database-dash.svg create mode 100644 assets/static/bootstrap-icons/database-down.svg create mode 100644 assets/static/bootstrap-icons/database-exclamation.svg create mode 100644 assets/static/bootstrap-icons/database-fill-add.svg create mode 100644 assets/static/bootstrap-icons/database-fill-check.svg create mode 100644 assets/static/bootstrap-icons/database-fill-dash.svg create mode 100644 assets/static/bootstrap-icons/database-fill-down.svg create mode 100644 assets/static/bootstrap-icons/database-fill-exclamation.svg create mode 100644 assets/static/bootstrap-icons/database-fill-gear.svg create mode 100644 assets/static/bootstrap-icons/database-fill-lock.svg create mode 100644 assets/static/bootstrap-icons/database-fill-slash.svg create mode 100644 assets/static/bootstrap-icons/database-fill-up.svg create mode 100644 assets/static/bootstrap-icons/database-fill-x.svg create mode 100644 assets/static/bootstrap-icons/database-fill.svg create mode 100644 assets/static/bootstrap-icons/database-gear.svg create mode 100644 assets/static/bootstrap-icons/database-lock.svg create mode 100644 assets/static/bootstrap-icons/database-slash.svg create mode 100644 assets/static/bootstrap-icons/database-up.svg create mode 100644 assets/static/bootstrap-icons/database-x.svg create mode 100644 assets/static/bootstrap-icons/database.svg create mode 100644 assets/static/bootstrap-icons/device-hdd-fill.svg create mode 100644 assets/static/bootstrap-icons/device-hdd.svg create mode 100644 assets/static/bootstrap-icons/device-ssd-fill.svg create mode 100644 assets/static/bootstrap-icons/device-ssd.svg create mode 100644 assets/static/bootstrap-icons/diagram-2-fill.svg create mode 100644 assets/static/bootstrap-icons/diagram-2.svg create mode 100644 assets/static/bootstrap-icons/diagram-3-fill.svg create mode 100644 assets/static/bootstrap-icons/diagram-3.svg create mode 100644 assets/static/bootstrap-icons/diamond-fill.svg create mode 100644 assets/static/bootstrap-icons/diamond-half.svg create mode 100644 assets/static/bootstrap-icons/diamond.svg create mode 100644 assets/static/bootstrap-icons/dice-1-fill.svg create mode 100644 assets/static/bootstrap-icons/dice-1.svg create mode 100644 assets/static/bootstrap-icons/dice-2-fill.svg create mode 100644 assets/static/bootstrap-icons/dice-2.svg create mode 100644 assets/static/bootstrap-icons/dice-3-fill.svg create mode 100644 assets/static/bootstrap-icons/dice-3.svg create mode 100644 assets/static/bootstrap-icons/dice-4-fill.svg create mode 100644 assets/static/bootstrap-icons/dice-4.svg create mode 100644 assets/static/bootstrap-icons/dice-5-fill.svg create mode 100644 assets/static/bootstrap-icons/dice-5.svg create mode 100644 assets/static/bootstrap-icons/dice-6-fill.svg create mode 100644 assets/static/bootstrap-icons/dice-6.svg create mode 100644 assets/static/bootstrap-icons/disc-fill.svg create mode 100644 assets/static/bootstrap-icons/disc.svg create mode 100644 assets/static/bootstrap-icons/discord.svg create mode 100644 assets/static/bootstrap-icons/display-fill.svg create mode 100644 assets/static/bootstrap-icons/display.svg create mode 100644 assets/static/bootstrap-icons/displayport-fill.svg create mode 100644 assets/static/bootstrap-icons/displayport.svg create mode 100644 assets/static/bootstrap-icons/distribute-horizontal.svg create mode 100644 assets/static/bootstrap-icons/distribute-vertical.svg create mode 100644 assets/static/bootstrap-icons/door-closed-fill.svg create mode 100644 assets/static/bootstrap-icons/door-closed.svg create mode 100644 assets/static/bootstrap-icons/door-open-fill.svg create mode 100644 assets/static/bootstrap-icons/door-open.svg create mode 100644 assets/static/bootstrap-icons/dot.svg create mode 100644 assets/static/bootstrap-icons/download.svg create mode 100644 assets/static/bootstrap-icons/dpad-fill.svg create mode 100644 assets/static/bootstrap-icons/dpad.svg create mode 100644 assets/static/bootstrap-icons/dribbble.svg create mode 100644 assets/static/bootstrap-icons/dropbox.svg create mode 100644 assets/static/bootstrap-icons/droplet-fill.svg create mode 100644 assets/static/bootstrap-icons/droplet-half.svg create mode 100644 assets/static/bootstrap-icons/droplet.svg create mode 100644 assets/static/bootstrap-icons/duffle-fill.svg create mode 100644 assets/static/bootstrap-icons/duffle.svg create mode 100644 assets/static/bootstrap-icons/ear-fill.svg create mode 100644 assets/static/bootstrap-icons/ear.svg create mode 100644 assets/static/bootstrap-icons/earbuds.svg create mode 100644 assets/static/bootstrap-icons/easel-fill.svg create mode 100644 assets/static/bootstrap-icons/easel.svg create mode 100644 assets/static/bootstrap-icons/easel2-fill.svg create mode 100644 assets/static/bootstrap-icons/easel2.svg create mode 100644 assets/static/bootstrap-icons/easel3-fill.svg create mode 100644 assets/static/bootstrap-icons/easel3.svg create mode 100644 assets/static/bootstrap-icons/egg-fill.svg create mode 100644 assets/static/bootstrap-icons/egg-fried.svg create mode 100644 assets/static/bootstrap-icons/egg.svg create mode 100644 assets/static/bootstrap-icons/eject-fill.svg create mode 100644 assets/static/bootstrap-icons/eject.svg create mode 100644 assets/static/bootstrap-icons/emoji-angry-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-angry.svg create mode 100644 assets/static/bootstrap-icons/emoji-astonished-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-astonished.svg create mode 100644 assets/static/bootstrap-icons/emoji-dizzy-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-dizzy.svg create mode 100644 assets/static/bootstrap-icons/emoji-expressionless-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-expressionless.svg create mode 100644 assets/static/bootstrap-icons/emoji-frown-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-frown.svg create mode 100644 assets/static/bootstrap-icons/emoji-grimace-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-grimace.svg create mode 100644 assets/static/bootstrap-icons/emoji-grin-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-grin.svg create mode 100644 assets/static/bootstrap-icons/emoji-heart-eyes-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-heart-eyes.svg create mode 100644 assets/static/bootstrap-icons/emoji-kiss-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-kiss.svg create mode 100644 assets/static/bootstrap-icons/emoji-laughing-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-laughing.svg create mode 100644 assets/static/bootstrap-icons/emoji-neutral-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-neutral.svg create mode 100644 assets/static/bootstrap-icons/emoji-smile-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-smile-upside-down-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-smile-upside-down.svg create mode 100644 assets/static/bootstrap-icons/emoji-smile.svg create mode 100644 assets/static/bootstrap-icons/emoji-sunglasses-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-sunglasses.svg create mode 100644 assets/static/bootstrap-icons/emoji-surprise-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-surprise.svg create mode 100644 assets/static/bootstrap-icons/emoji-tear-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-tear.svg create mode 100644 assets/static/bootstrap-icons/emoji-wink-fill.svg create mode 100644 assets/static/bootstrap-icons/emoji-wink.svg create mode 100644 assets/static/bootstrap-icons/envelope-arrow-down-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-arrow-down.svg create mode 100644 assets/static/bootstrap-icons/envelope-arrow-up-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-arrow-up.svg create mode 100644 assets/static/bootstrap-icons/envelope-at-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-at.svg create mode 100644 assets/static/bootstrap-icons/envelope-check-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-check.svg create mode 100644 assets/static/bootstrap-icons/envelope-dash-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-dash.svg create mode 100644 assets/static/bootstrap-icons/envelope-exclamation-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-exclamation.svg create mode 100644 assets/static/bootstrap-icons/envelope-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-heart.svg create mode 100644 assets/static/bootstrap-icons/envelope-open-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-open-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-open-heart.svg create mode 100644 assets/static/bootstrap-icons/envelope-open.svg create mode 100644 assets/static/bootstrap-icons/envelope-paper-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-paper-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-paper-heart.svg create mode 100644 assets/static/bootstrap-icons/envelope-paper.svg create mode 100644 assets/static/bootstrap-icons/envelope-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-plus.svg create mode 100644 assets/static/bootstrap-icons/envelope-slash-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-slash.svg create mode 100644 assets/static/bootstrap-icons/envelope-x-fill.svg create mode 100644 assets/static/bootstrap-icons/envelope-x.svg create mode 100644 assets/static/bootstrap-icons/envelope.svg create mode 100644 assets/static/bootstrap-icons/eraser-fill.svg create mode 100644 assets/static/bootstrap-icons/eraser.svg create mode 100644 assets/static/bootstrap-icons/escape.svg create mode 100644 assets/static/bootstrap-icons/ethernet.svg create mode 100644 assets/static/bootstrap-icons/ev-front-fill.svg create mode 100644 assets/static/bootstrap-icons/ev-front.svg create mode 100644 assets/static/bootstrap-icons/ev-station-fill.svg create mode 100644 assets/static/bootstrap-icons/ev-station.svg create mode 100644 assets/static/bootstrap-icons/exclamation-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/exclamation-circle.svg create mode 100644 assets/static/bootstrap-icons/exclamation-diamond-fill.svg create mode 100644 assets/static/bootstrap-icons/exclamation-diamond.svg create mode 100644 assets/static/bootstrap-icons/exclamation-lg.svg create mode 100644 assets/static/bootstrap-icons/exclamation-octagon-fill.svg create mode 100644 assets/static/bootstrap-icons/exclamation-octagon.svg create mode 100644 assets/static/bootstrap-icons/exclamation-square-fill.svg create mode 100644 assets/static/bootstrap-icons/exclamation-square.svg create mode 100644 assets/static/bootstrap-icons/exclamation-triangle-fill.svg create mode 100644 assets/static/bootstrap-icons/exclamation-triangle.svg create mode 100644 assets/static/bootstrap-icons/exclamation.svg create mode 100644 assets/static/bootstrap-icons/exclude.svg create mode 100644 assets/static/bootstrap-icons/explicit-fill.svg create mode 100644 assets/static/bootstrap-icons/explicit.svg create mode 100644 assets/static/bootstrap-icons/exposure.svg create mode 100644 assets/static/bootstrap-icons/eye-fill.svg create mode 100644 assets/static/bootstrap-icons/eye-slash-fill.svg create mode 100644 assets/static/bootstrap-icons/eye-slash.svg create mode 100644 assets/static/bootstrap-icons/eye.svg create mode 100644 assets/static/bootstrap-icons/eyedropper.svg create mode 100644 assets/static/bootstrap-icons/eyeglasses.svg create mode 100644 assets/static/bootstrap-icons/facebook.svg create mode 100644 assets/static/bootstrap-icons/fan.svg create mode 100644 assets/static/bootstrap-icons/fast-forward-btn-fill.svg create mode 100644 assets/static/bootstrap-icons/fast-forward-btn.svg create mode 100644 assets/static/bootstrap-icons/fast-forward-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/fast-forward-circle.svg create mode 100644 assets/static/bootstrap-icons/fast-forward-fill.svg create mode 100644 assets/static/bootstrap-icons/fast-forward.svg create mode 100644 assets/static/bootstrap-icons/feather.svg create mode 100644 assets/static/bootstrap-icons/feather2.svg create mode 100644 assets/static/bootstrap-icons/file-arrow-down-fill.svg create mode 100644 assets/static/bootstrap-icons/file-arrow-down.svg create mode 100644 assets/static/bootstrap-icons/file-arrow-up-fill.svg create mode 100644 assets/static/bootstrap-icons/file-arrow-up.svg create mode 100644 assets/static/bootstrap-icons/file-bar-graph-fill.svg create mode 100644 assets/static/bootstrap-icons/file-bar-graph.svg create mode 100644 assets/static/bootstrap-icons/file-binary-fill.svg create mode 100644 assets/static/bootstrap-icons/file-binary.svg create mode 100644 assets/static/bootstrap-icons/file-break-fill.svg create mode 100644 assets/static/bootstrap-icons/file-break.svg create mode 100644 assets/static/bootstrap-icons/file-check-fill.svg create mode 100644 assets/static/bootstrap-icons/file-check.svg create mode 100644 assets/static/bootstrap-icons/file-code-fill.svg create mode 100644 assets/static/bootstrap-icons/file-code.svg create mode 100644 assets/static/bootstrap-icons/file-diff-fill.svg create mode 100644 assets/static/bootstrap-icons/file-diff.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-arrow-down-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-arrow-down.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-arrow-up-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-arrow-up.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-bar-graph-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-bar-graph.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-binary-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-binary.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-break-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-break.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-check-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-check.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-code-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-code.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-diff-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-diff.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-easel-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-easel.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-excel-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-excel.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-font-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-font.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-image-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-image.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-lock-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-lock.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-lock2-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-lock2.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-medical-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-medical.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-minus-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-minus.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-music-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-music.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-pdf-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-pdf.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-person-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-person.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-play-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-play.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-plus.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-post-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-post.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-ppt-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-ppt.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-richtext-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-richtext.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-ruled-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-ruled.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-slides-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-slides.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-spreadsheet-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-spreadsheet.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-text-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-text.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-word-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-word.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-x-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-x.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-zip-fill.svg create mode 100644 assets/static/bootstrap-icons/file-earmark-zip.svg create mode 100644 assets/static/bootstrap-icons/file-earmark.svg create mode 100644 assets/static/bootstrap-icons/file-easel-fill.svg create mode 100644 assets/static/bootstrap-icons/file-easel.svg create mode 100644 assets/static/bootstrap-icons/file-excel-fill.svg create mode 100644 assets/static/bootstrap-icons/file-excel.svg create mode 100644 assets/static/bootstrap-icons/file-fill.svg create mode 100644 assets/static/bootstrap-icons/file-font-fill.svg create mode 100644 assets/static/bootstrap-icons/file-font.svg create mode 100644 assets/static/bootstrap-icons/file-image-fill.svg create mode 100644 assets/static/bootstrap-icons/file-image.svg create mode 100644 assets/static/bootstrap-icons/file-lock-fill.svg create mode 100644 assets/static/bootstrap-icons/file-lock.svg create mode 100644 assets/static/bootstrap-icons/file-lock2-fill.svg create mode 100644 assets/static/bootstrap-icons/file-lock2.svg create mode 100644 assets/static/bootstrap-icons/file-medical-fill.svg create mode 100644 assets/static/bootstrap-icons/file-medical.svg create mode 100644 assets/static/bootstrap-icons/file-minus-fill.svg create mode 100644 assets/static/bootstrap-icons/file-minus.svg create mode 100644 assets/static/bootstrap-icons/file-music-fill.svg create mode 100644 assets/static/bootstrap-icons/file-music.svg create mode 100644 assets/static/bootstrap-icons/file-pdf-fill.svg create mode 100644 assets/static/bootstrap-icons/file-pdf.svg create mode 100644 assets/static/bootstrap-icons/file-person-fill.svg create mode 100644 assets/static/bootstrap-icons/file-person.svg create mode 100644 assets/static/bootstrap-icons/file-play-fill.svg create mode 100644 assets/static/bootstrap-icons/file-play.svg create mode 100644 assets/static/bootstrap-icons/file-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/file-plus.svg create mode 100644 assets/static/bootstrap-icons/file-post-fill.svg create mode 100644 assets/static/bootstrap-icons/file-post.svg create mode 100644 assets/static/bootstrap-icons/file-ppt-fill.svg create mode 100644 assets/static/bootstrap-icons/file-ppt.svg create mode 100644 assets/static/bootstrap-icons/file-richtext-fill.svg create mode 100644 assets/static/bootstrap-icons/file-richtext.svg create mode 100644 assets/static/bootstrap-icons/file-ruled-fill.svg create mode 100644 assets/static/bootstrap-icons/file-ruled.svg create mode 100644 assets/static/bootstrap-icons/file-slides-fill.svg create mode 100644 assets/static/bootstrap-icons/file-slides.svg create mode 100644 assets/static/bootstrap-icons/file-spreadsheet-fill.svg create mode 100644 assets/static/bootstrap-icons/file-spreadsheet.svg create mode 100644 assets/static/bootstrap-icons/file-text-fill.svg create mode 100644 assets/static/bootstrap-icons/file-text.svg create mode 100644 assets/static/bootstrap-icons/file-word-fill.svg create mode 100644 assets/static/bootstrap-icons/file-word.svg create mode 100644 assets/static/bootstrap-icons/file-x-fill.svg create mode 100644 assets/static/bootstrap-icons/file-x.svg create mode 100644 assets/static/bootstrap-icons/file-zip-fill.svg create mode 100644 assets/static/bootstrap-icons/file-zip.svg create mode 100644 assets/static/bootstrap-icons/file.svg create mode 100644 assets/static/bootstrap-icons/files-alt.svg create mode 100644 assets/static/bootstrap-icons/files.svg create mode 100644 assets/static/bootstrap-icons/filetype-aac.svg create mode 100644 assets/static/bootstrap-icons/filetype-ai.svg create mode 100644 assets/static/bootstrap-icons/filetype-bmp.svg create mode 100644 assets/static/bootstrap-icons/filetype-cs.svg create mode 100644 assets/static/bootstrap-icons/filetype-css.svg create mode 100644 assets/static/bootstrap-icons/filetype-csv.svg create mode 100644 assets/static/bootstrap-icons/filetype-doc.svg create mode 100644 assets/static/bootstrap-icons/filetype-docx.svg create mode 100644 assets/static/bootstrap-icons/filetype-exe.svg create mode 100644 assets/static/bootstrap-icons/filetype-gif.svg create mode 100644 assets/static/bootstrap-icons/filetype-heic.svg create mode 100644 assets/static/bootstrap-icons/filetype-html.svg create mode 100644 assets/static/bootstrap-icons/filetype-java.svg create mode 100644 assets/static/bootstrap-icons/filetype-jpg.svg create mode 100644 assets/static/bootstrap-icons/filetype-js.svg create mode 100644 assets/static/bootstrap-icons/filetype-json.svg create mode 100644 assets/static/bootstrap-icons/filetype-jsx.svg create mode 100644 assets/static/bootstrap-icons/filetype-key.svg create mode 100644 assets/static/bootstrap-icons/filetype-m4p.svg create mode 100644 assets/static/bootstrap-icons/filetype-md.svg create mode 100644 assets/static/bootstrap-icons/filetype-mdx.svg create mode 100644 assets/static/bootstrap-icons/filetype-mov.svg create mode 100644 assets/static/bootstrap-icons/filetype-mp3.svg create mode 100644 assets/static/bootstrap-icons/filetype-mp4.svg create mode 100644 assets/static/bootstrap-icons/filetype-otf.svg create mode 100644 assets/static/bootstrap-icons/filetype-pdf.svg create mode 100644 assets/static/bootstrap-icons/filetype-php.svg create mode 100644 assets/static/bootstrap-icons/filetype-png.svg create mode 100644 assets/static/bootstrap-icons/filetype-ppt.svg create mode 100644 assets/static/bootstrap-icons/filetype-pptx.svg create mode 100644 assets/static/bootstrap-icons/filetype-psd.svg create mode 100644 assets/static/bootstrap-icons/filetype-py.svg create mode 100644 assets/static/bootstrap-icons/filetype-raw.svg create mode 100644 assets/static/bootstrap-icons/filetype-rb.svg create mode 100644 assets/static/bootstrap-icons/filetype-sass.svg create mode 100644 assets/static/bootstrap-icons/filetype-scss.svg create mode 100644 assets/static/bootstrap-icons/filetype-sh.svg create mode 100644 assets/static/bootstrap-icons/filetype-sql.svg create mode 100644 assets/static/bootstrap-icons/filetype-svg.svg create mode 100644 assets/static/bootstrap-icons/filetype-tiff.svg create mode 100644 assets/static/bootstrap-icons/filetype-tsx.svg create mode 100644 assets/static/bootstrap-icons/filetype-ttf.svg create mode 100644 assets/static/bootstrap-icons/filetype-txt.svg create mode 100644 assets/static/bootstrap-icons/filetype-wav.svg create mode 100644 assets/static/bootstrap-icons/filetype-woff.svg create mode 100644 assets/static/bootstrap-icons/filetype-xls.svg create mode 100644 assets/static/bootstrap-icons/filetype-xlsx.svg create mode 100644 assets/static/bootstrap-icons/filetype-xml.svg create mode 100644 assets/static/bootstrap-icons/filetype-yml.svg create mode 100644 assets/static/bootstrap-icons/film.svg create mode 100644 assets/static/bootstrap-icons/filter-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/filter-circle.svg create mode 100644 assets/static/bootstrap-icons/filter-left.svg create mode 100644 assets/static/bootstrap-icons/filter-right.svg create mode 100644 assets/static/bootstrap-icons/filter-square-fill.svg create mode 100644 assets/static/bootstrap-icons/filter-square.svg create mode 100644 assets/static/bootstrap-icons/filter.svg create mode 100644 assets/static/bootstrap-icons/fingerprint.svg create mode 100644 assets/static/bootstrap-icons/fire.svg create mode 100644 assets/static/bootstrap-icons/flag-fill.svg create mode 100644 assets/static/bootstrap-icons/flag.svg create mode 100644 assets/static/bootstrap-icons/floppy-fill.svg create mode 100644 assets/static/bootstrap-icons/floppy.svg create mode 100644 assets/static/bootstrap-icons/floppy2-fill.svg create mode 100644 assets/static/bootstrap-icons/floppy2.svg create mode 100644 assets/static/bootstrap-icons/flower1.svg create mode 100644 assets/static/bootstrap-icons/flower2.svg create mode 100644 assets/static/bootstrap-icons/flower3.svg create mode 100644 assets/static/bootstrap-icons/folder-check.svg create mode 100644 assets/static/bootstrap-icons/folder-fill.svg create mode 100644 assets/static/bootstrap-icons/folder-minus.svg create mode 100644 assets/static/bootstrap-icons/folder-plus.svg create mode 100644 assets/static/bootstrap-icons/folder-symlink-fill.svg create mode 100644 assets/static/bootstrap-icons/folder-symlink.svg create mode 100644 assets/static/bootstrap-icons/folder-x.svg create mode 100644 assets/static/bootstrap-icons/folder.svg create mode 100644 assets/static/bootstrap-icons/folder2-open.svg create mode 100644 assets/static/bootstrap-icons/folder2.svg create mode 100644 assets/static/bootstrap-icons/font/bootstrap-icons.css create mode 100644 assets/static/bootstrap-icons/font/bootstrap-icons.json create mode 100644 assets/static/bootstrap-icons/font/bootstrap-icons.min.css create mode 100644 assets/static/bootstrap-icons/font/bootstrap-icons.scss create mode 100644 assets/static/bootstrap-icons/font/fonts/bootstrap-icons.woff create mode 100644 assets/static/bootstrap-icons/font/fonts/bootstrap-icons.woff2 create mode 100644 assets/static/bootstrap-icons/fonts.svg create mode 100644 assets/static/bootstrap-icons/forward-fill.svg create mode 100644 assets/static/bootstrap-icons/forward.svg create mode 100644 assets/static/bootstrap-icons/front.svg create mode 100644 assets/static/bootstrap-icons/fuel-pump-diesel-fill.svg create mode 100644 assets/static/bootstrap-icons/fuel-pump-diesel.svg create mode 100644 assets/static/bootstrap-icons/fuel-pump-fill.svg create mode 100644 assets/static/bootstrap-icons/fuel-pump.svg create mode 100644 assets/static/bootstrap-icons/fullscreen-exit.svg create mode 100644 assets/static/bootstrap-icons/fullscreen.svg create mode 100644 assets/static/bootstrap-icons/funnel-fill.svg create mode 100644 assets/static/bootstrap-icons/funnel.svg create mode 100644 assets/static/bootstrap-icons/gear-fill.svg create mode 100644 assets/static/bootstrap-icons/gear-wide-connected.svg create mode 100644 assets/static/bootstrap-icons/gear-wide.svg create mode 100644 assets/static/bootstrap-icons/gear.svg create mode 100644 assets/static/bootstrap-icons/gem.svg create mode 100644 assets/static/bootstrap-icons/gender-ambiguous.svg create mode 100644 assets/static/bootstrap-icons/gender-female.svg create mode 100644 assets/static/bootstrap-icons/gender-male.svg create mode 100644 assets/static/bootstrap-icons/gender-neuter.svg create mode 100644 assets/static/bootstrap-icons/gender-trans.svg create mode 100644 assets/static/bootstrap-icons/geo-alt-fill.svg create mode 100644 assets/static/bootstrap-icons/geo-alt.svg create mode 100644 assets/static/bootstrap-icons/geo-fill.svg create mode 100644 assets/static/bootstrap-icons/geo.svg create mode 100644 assets/static/bootstrap-icons/gift-fill.svg create mode 100644 assets/static/bootstrap-icons/gift.svg create mode 100644 assets/static/bootstrap-icons/git.svg create mode 100644 assets/static/bootstrap-icons/github.svg create mode 100644 assets/static/bootstrap-icons/gitlab.svg create mode 100644 assets/static/bootstrap-icons/globe-americas.svg create mode 100644 assets/static/bootstrap-icons/globe-asia-australia.svg create mode 100644 assets/static/bootstrap-icons/globe-central-south-asia.svg create mode 100644 assets/static/bootstrap-icons/globe-europe-africa.svg create mode 100644 assets/static/bootstrap-icons/globe.svg create mode 100644 assets/static/bootstrap-icons/globe2.svg create mode 100644 assets/static/bootstrap-icons/google-play.svg create mode 100644 assets/static/bootstrap-icons/google.svg create mode 100644 assets/static/bootstrap-icons/gpu-card.svg create mode 100644 assets/static/bootstrap-icons/graph-down-arrow.svg create mode 100644 assets/static/bootstrap-icons/graph-down.svg create mode 100644 assets/static/bootstrap-icons/graph-up-arrow.svg create mode 100644 assets/static/bootstrap-icons/graph-up.svg create mode 100644 assets/static/bootstrap-icons/grid-1x2-fill.svg create mode 100644 assets/static/bootstrap-icons/grid-1x2.svg create mode 100644 assets/static/bootstrap-icons/grid-3x2-gap-fill.svg create mode 100644 assets/static/bootstrap-icons/grid-3x2-gap.svg create mode 100644 assets/static/bootstrap-icons/grid-3x2.svg create mode 100644 assets/static/bootstrap-icons/grid-3x3-gap-fill.svg create mode 100644 assets/static/bootstrap-icons/grid-3x3-gap.svg create mode 100644 assets/static/bootstrap-icons/grid-3x3.svg create mode 100644 assets/static/bootstrap-icons/grid-fill.svg create mode 100644 assets/static/bootstrap-icons/grid.svg create mode 100644 assets/static/bootstrap-icons/grip-horizontal.svg create mode 100644 assets/static/bootstrap-icons/grip-vertical.svg create mode 100644 assets/static/bootstrap-icons/h-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/h-circle.svg create mode 100644 assets/static/bootstrap-icons/h-square-fill.svg create mode 100644 assets/static/bootstrap-icons/h-square.svg create mode 100644 assets/static/bootstrap-icons/hammer.svg create mode 100644 assets/static/bootstrap-icons/hand-index-fill.svg create mode 100644 assets/static/bootstrap-icons/hand-index-thumb-fill.svg create mode 100644 assets/static/bootstrap-icons/hand-index-thumb.svg create mode 100644 assets/static/bootstrap-icons/hand-index.svg create mode 100644 assets/static/bootstrap-icons/hand-thumbs-down-fill.svg create mode 100644 assets/static/bootstrap-icons/hand-thumbs-down.svg create mode 100644 assets/static/bootstrap-icons/hand-thumbs-up-fill.svg create mode 100644 assets/static/bootstrap-icons/hand-thumbs-up.svg create mode 100644 assets/static/bootstrap-icons/handbag-fill.svg create mode 100644 assets/static/bootstrap-icons/handbag.svg create mode 100644 assets/static/bootstrap-icons/hash.svg create mode 100644 assets/static/bootstrap-icons/hdd-fill.svg create mode 100644 assets/static/bootstrap-icons/hdd-network-fill.svg create mode 100644 assets/static/bootstrap-icons/hdd-network.svg create mode 100644 assets/static/bootstrap-icons/hdd-rack-fill.svg create mode 100644 assets/static/bootstrap-icons/hdd-rack.svg create mode 100644 assets/static/bootstrap-icons/hdd-stack-fill.svg create mode 100644 assets/static/bootstrap-icons/hdd-stack.svg create mode 100644 assets/static/bootstrap-icons/hdd.svg create mode 100644 assets/static/bootstrap-icons/hdmi-fill.svg create mode 100644 assets/static/bootstrap-icons/hdmi.svg create mode 100644 assets/static/bootstrap-icons/headphones.svg create mode 100644 assets/static/bootstrap-icons/headset-vr.svg create mode 100644 assets/static/bootstrap-icons/headset.svg create mode 100644 assets/static/bootstrap-icons/heart-arrow.svg create mode 100644 assets/static/bootstrap-icons/heart-fill.svg create mode 100644 assets/static/bootstrap-icons/heart-half.svg create mode 100644 assets/static/bootstrap-icons/heart-pulse-fill.svg create mode 100644 assets/static/bootstrap-icons/heart-pulse.svg create mode 100644 assets/static/bootstrap-icons/heart.svg create mode 100644 assets/static/bootstrap-icons/heartbreak-fill.svg create mode 100644 assets/static/bootstrap-icons/heartbreak.svg create mode 100644 assets/static/bootstrap-icons/hearts.svg create mode 100644 assets/static/bootstrap-icons/heptagon-fill.svg create mode 100644 assets/static/bootstrap-icons/heptagon-half.svg create mode 100644 assets/static/bootstrap-icons/heptagon.svg create mode 100644 assets/static/bootstrap-icons/hexagon-fill.svg create mode 100644 assets/static/bootstrap-icons/hexagon-half.svg create mode 100644 assets/static/bootstrap-icons/hexagon.svg create mode 100644 assets/static/bootstrap-icons/highlighter.svg create mode 100644 assets/static/bootstrap-icons/highlights.svg create mode 100644 assets/static/bootstrap-icons/hospital-fill.svg create mode 100644 assets/static/bootstrap-icons/hospital.svg create mode 100644 assets/static/bootstrap-icons/hourglass-bottom.svg create mode 100644 assets/static/bootstrap-icons/hourglass-split.svg create mode 100644 assets/static/bootstrap-icons/hourglass-top.svg create mode 100644 assets/static/bootstrap-icons/hourglass.svg create mode 100644 assets/static/bootstrap-icons/house-add-fill.svg create mode 100644 assets/static/bootstrap-icons/house-add.svg create mode 100644 assets/static/bootstrap-icons/house-check-fill.svg create mode 100644 assets/static/bootstrap-icons/house-check.svg create mode 100644 assets/static/bootstrap-icons/house-dash-fill.svg create mode 100644 assets/static/bootstrap-icons/house-dash.svg create mode 100644 assets/static/bootstrap-icons/house-door-fill.svg create mode 100644 assets/static/bootstrap-icons/house-door.svg create mode 100644 assets/static/bootstrap-icons/house-down-fill.svg create mode 100644 assets/static/bootstrap-icons/house-down.svg create mode 100644 assets/static/bootstrap-icons/house-exclamation-fill.svg create mode 100644 assets/static/bootstrap-icons/house-exclamation.svg create mode 100644 assets/static/bootstrap-icons/house-fill.svg create mode 100644 assets/static/bootstrap-icons/house-gear-fill.svg create mode 100644 assets/static/bootstrap-icons/house-gear.svg create mode 100644 assets/static/bootstrap-icons/house-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/house-heart.svg create mode 100644 assets/static/bootstrap-icons/house-lock-fill.svg create mode 100644 assets/static/bootstrap-icons/house-lock.svg create mode 100644 assets/static/bootstrap-icons/house-slash-fill.svg create mode 100644 assets/static/bootstrap-icons/house-slash.svg create mode 100644 assets/static/bootstrap-icons/house-up-fill.svg create mode 100644 assets/static/bootstrap-icons/house-up.svg create mode 100644 assets/static/bootstrap-icons/house-x-fill.svg create mode 100644 assets/static/bootstrap-icons/house-x.svg create mode 100644 assets/static/bootstrap-icons/house.svg create mode 100644 assets/static/bootstrap-icons/houses-fill.svg create mode 100644 assets/static/bootstrap-icons/houses.svg create mode 100644 assets/static/bootstrap-icons/hr.svg create mode 100644 assets/static/bootstrap-icons/hurricane.svg create mode 100644 assets/static/bootstrap-icons/hypnotize.svg create mode 100644 assets/static/bootstrap-icons/image-alt.svg create mode 100644 assets/static/bootstrap-icons/image-fill.svg create mode 100644 assets/static/bootstrap-icons/image.svg create mode 100644 assets/static/bootstrap-icons/images.svg create mode 100644 assets/static/bootstrap-icons/inbox-fill.svg create mode 100644 assets/static/bootstrap-icons/inbox.svg create mode 100644 assets/static/bootstrap-icons/inboxes-fill.svg create mode 100644 assets/static/bootstrap-icons/inboxes.svg create mode 100644 assets/static/bootstrap-icons/incognito.svg create mode 100644 assets/static/bootstrap-icons/indent.svg create mode 100644 assets/static/bootstrap-icons/infinity.svg create mode 100644 assets/static/bootstrap-icons/info-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/info-circle.svg create mode 100644 assets/static/bootstrap-icons/info-lg.svg create mode 100644 assets/static/bootstrap-icons/info-square-fill.svg create mode 100644 assets/static/bootstrap-icons/info-square.svg create mode 100644 assets/static/bootstrap-icons/info.svg create mode 100644 assets/static/bootstrap-icons/input-cursor-text.svg create mode 100644 assets/static/bootstrap-icons/input-cursor.svg create mode 100644 assets/static/bootstrap-icons/instagram.svg create mode 100644 assets/static/bootstrap-icons/intersect.svg create mode 100644 assets/static/bootstrap-icons/journal-album.svg create mode 100644 assets/static/bootstrap-icons/journal-arrow-down.svg create mode 100644 assets/static/bootstrap-icons/journal-arrow-up.svg create mode 100644 assets/static/bootstrap-icons/journal-bookmark-fill.svg create mode 100644 assets/static/bootstrap-icons/journal-bookmark.svg create mode 100644 assets/static/bootstrap-icons/journal-check.svg create mode 100644 assets/static/bootstrap-icons/journal-code.svg create mode 100644 assets/static/bootstrap-icons/journal-medical.svg create mode 100644 assets/static/bootstrap-icons/journal-minus.svg create mode 100644 assets/static/bootstrap-icons/journal-plus.svg create mode 100644 assets/static/bootstrap-icons/journal-richtext.svg create mode 100644 assets/static/bootstrap-icons/journal-text.svg create mode 100644 assets/static/bootstrap-icons/journal-x.svg create mode 100644 assets/static/bootstrap-icons/journal.svg create mode 100644 assets/static/bootstrap-icons/journals.svg create mode 100644 assets/static/bootstrap-icons/joystick.svg create mode 100644 assets/static/bootstrap-icons/justify-left.svg create mode 100644 assets/static/bootstrap-icons/justify-right.svg create mode 100644 assets/static/bootstrap-icons/justify.svg create mode 100644 assets/static/bootstrap-icons/kanban-fill.svg create mode 100644 assets/static/bootstrap-icons/kanban.svg create mode 100644 assets/static/bootstrap-icons/key-fill.svg create mode 100644 assets/static/bootstrap-icons/key.svg create mode 100644 assets/static/bootstrap-icons/keyboard-fill.svg create mode 100644 assets/static/bootstrap-icons/keyboard.svg create mode 100644 assets/static/bootstrap-icons/ladder.svg create mode 100644 assets/static/bootstrap-icons/lamp-fill.svg create mode 100644 assets/static/bootstrap-icons/lamp.svg create mode 100644 assets/static/bootstrap-icons/laptop-fill.svg create mode 100644 assets/static/bootstrap-icons/laptop.svg create mode 100644 assets/static/bootstrap-icons/layer-backward.svg create mode 100644 assets/static/bootstrap-icons/layer-forward.svg create mode 100644 assets/static/bootstrap-icons/layers-fill.svg create mode 100644 assets/static/bootstrap-icons/layers-half.svg create mode 100644 assets/static/bootstrap-icons/layers.svg create mode 100644 assets/static/bootstrap-icons/layout-sidebar-inset-reverse.svg create mode 100644 assets/static/bootstrap-icons/layout-sidebar-inset.svg create mode 100644 assets/static/bootstrap-icons/layout-sidebar-reverse.svg create mode 100644 assets/static/bootstrap-icons/layout-sidebar.svg create mode 100644 assets/static/bootstrap-icons/layout-split.svg create mode 100644 assets/static/bootstrap-icons/layout-text-sidebar-reverse.svg create mode 100644 assets/static/bootstrap-icons/layout-text-sidebar.svg create mode 100644 assets/static/bootstrap-icons/layout-text-window-reverse.svg create mode 100644 assets/static/bootstrap-icons/layout-text-window.svg create mode 100644 assets/static/bootstrap-icons/layout-three-columns.svg create mode 100644 assets/static/bootstrap-icons/layout-wtf.svg create mode 100644 assets/static/bootstrap-icons/life-preserver.svg create mode 100644 assets/static/bootstrap-icons/lightbulb-fill.svg create mode 100644 assets/static/bootstrap-icons/lightbulb-off-fill.svg create mode 100644 assets/static/bootstrap-icons/lightbulb-off.svg create mode 100644 assets/static/bootstrap-icons/lightbulb.svg create mode 100644 assets/static/bootstrap-icons/lightning-charge-fill.svg create mode 100644 assets/static/bootstrap-icons/lightning-charge.svg create mode 100644 assets/static/bootstrap-icons/lightning-fill.svg create mode 100644 assets/static/bootstrap-icons/lightning.svg create mode 100644 assets/static/bootstrap-icons/line.svg create mode 100644 assets/static/bootstrap-icons/link-45deg.svg create mode 100644 assets/static/bootstrap-icons/link.svg create mode 100644 assets/static/bootstrap-icons/linkedin.svg create mode 100644 assets/static/bootstrap-icons/list-check.svg create mode 100644 assets/static/bootstrap-icons/list-columns-reverse.svg create mode 100644 assets/static/bootstrap-icons/list-columns.svg create mode 100644 assets/static/bootstrap-icons/list-nested.svg create mode 100644 assets/static/bootstrap-icons/list-ol.svg create mode 100644 assets/static/bootstrap-icons/list-stars.svg create mode 100644 assets/static/bootstrap-icons/list-task.svg create mode 100644 assets/static/bootstrap-icons/list-ul.svg create mode 100644 assets/static/bootstrap-icons/list.svg create mode 100644 assets/static/bootstrap-icons/lock-fill.svg create mode 100644 assets/static/bootstrap-icons/lock.svg create mode 100644 assets/static/bootstrap-icons/luggage-fill.svg create mode 100644 assets/static/bootstrap-icons/luggage.svg create mode 100644 assets/static/bootstrap-icons/lungs-fill.svg create mode 100644 assets/static/bootstrap-icons/lungs.svg create mode 100644 assets/static/bootstrap-icons/magic.svg create mode 100644 assets/static/bootstrap-icons/magnet-fill.svg create mode 100644 assets/static/bootstrap-icons/magnet.svg create mode 100644 assets/static/bootstrap-icons/mailbox-flag.svg create mode 100644 assets/static/bootstrap-icons/mailbox.svg create mode 100644 assets/static/bootstrap-icons/mailbox2-flag.svg create mode 100644 assets/static/bootstrap-icons/mailbox2.svg create mode 100644 assets/static/bootstrap-icons/map-fill.svg create mode 100644 assets/static/bootstrap-icons/map.svg create mode 100644 assets/static/bootstrap-icons/markdown-fill.svg create mode 100644 assets/static/bootstrap-icons/markdown.svg create mode 100644 assets/static/bootstrap-icons/marker-tip.svg create mode 100644 assets/static/bootstrap-icons/mask.svg create mode 100644 assets/static/bootstrap-icons/mastodon.svg create mode 100644 assets/static/bootstrap-icons/medium.svg create mode 100644 assets/static/bootstrap-icons/megaphone-fill.svg create mode 100644 assets/static/bootstrap-icons/megaphone.svg create mode 100644 assets/static/bootstrap-icons/memory.svg create mode 100644 assets/static/bootstrap-icons/menu-app-fill.svg create mode 100644 assets/static/bootstrap-icons/menu-app.svg create mode 100644 assets/static/bootstrap-icons/menu-button-fill.svg create mode 100644 assets/static/bootstrap-icons/menu-button-wide-fill.svg create mode 100644 assets/static/bootstrap-icons/menu-button-wide.svg create mode 100644 assets/static/bootstrap-icons/menu-button.svg create mode 100644 assets/static/bootstrap-icons/menu-down.svg create mode 100644 assets/static/bootstrap-icons/menu-up.svg create mode 100644 assets/static/bootstrap-icons/messenger.svg create mode 100644 assets/static/bootstrap-icons/meta.svg create mode 100644 assets/static/bootstrap-icons/mic-fill.svg create mode 100644 assets/static/bootstrap-icons/mic-mute-fill.svg create mode 100644 assets/static/bootstrap-icons/mic-mute.svg create mode 100644 assets/static/bootstrap-icons/mic.svg create mode 100644 assets/static/bootstrap-icons/microsoft-teams.svg create mode 100644 assets/static/bootstrap-icons/microsoft.svg create mode 100644 assets/static/bootstrap-icons/minecart-loaded.svg create mode 100644 assets/static/bootstrap-icons/minecart.svg create mode 100644 assets/static/bootstrap-icons/modem-fill.svg create mode 100644 assets/static/bootstrap-icons/modem.svg create mode 100644 assets/static/bootstrap-icons/moisture.svg create mode 100644 assets/static/bootstrap-icons/moon-fill.svg create mode 100644 assets/static/bootstrap-icons/moon-stars-fill.svg create mode 100644 assets/static/bootstrap-icons/moon-stars.svg create mode 100644 assets/static/bootstrap-icons/moon.svg create mode 100644 assets/static/bootstrap-icons/mortarboard-fill.svg create mode 100644 assets/static/bootstrap-icons/mortarboard.svg create mode 100644 assets/static/bootstrap-icons/motherboard-fill.svg create mode 100644 assets/static/bootstrap-icons/motherboard.svg create mode 100644 assets/static/bootstrap-icons/mouse-fill.svg create mode 100644 assets/static/bootstrap-icons/mouse.svg create mode 100644 assets/static/bootstrap-icons/mouse2-fill.svg create mode 100644 assets/static/bootstrap-icons/mouse2.svg create mode 100644 assets/static/bootstrap-icons/mouse3-fill.svg create mode 100644 assets/static/bootstrap-icons/mouse3.svg create mode 100644 assets/static/bootstrap-icons/music-note-beamed.svg create mode 100644 assets/static/bootstrap-icons/music-note-list.svg create mode 100644 assets/static/bootstrap-icons/music-note.svg create mode 100644 assets/static/bootstrap-icons/music-player-fill.svg create mode 100644 assets/static/bootstrap-icons/music-player.svg create mode 100644 assets/static/bootstrap-icons/newspaper.svg create mode 100644 assets/static/bootstrap-icons/nintendo-switch.svg create mode 100644 assets/static/bootstrap-icons/node-minus-fill.svg create mode 100644 assets/static/bootstrap-icons/node-minus.svg create mode 100644 assets/static/bootstrap-icons/node-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/node-plus.svg create mode 100644 assets/static/bootstrap-icons/noise-reduction.svg create mode 100644 assets/static/bootstrap-icons/nut-fill.svg create mode 100644 assets/static/bootstrap-icons/nut.svg create mode 100644 assets/static/bootstrap-icons/nvidia.svg create mode 100644 assets/static/bootstrap-icons/nvme-fill.svg create mode 100644 assets/static/bootstrap-icons/nvme.svg create mode 100644 assets/static/bootstrap-icons/octagon-fill.svg create mode 100644 assets/static/bootstrap-icons/octagon-half.svg create mode 100644 assets/static/bootstrap-icons/octagon.svg create mode 100644 assets/static/bootstrap-icons/opencollective.svg create mode 100644 assets/static/bootstrap-icons/optical-audio-fill.svg create mode 100644 assets/static/bootstrap-icons/optical-audio.svg create mode 100644 assets/static/bootstrap-icons/option.svg create mode 100644 assets/static/bootstrap-icons/outlet.svg create mode 100644 assets/static/bootstrap-icons/p-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/p-circle.svg create mode 100644 assets/static/bootstrap-icons/p-square-fill.svg create mode 100644 assets/static/bootstrap-icons/p-square.svg create mode 100644 assets/static/bootstrap-icons/paint-bucket.svg create mode 100644 assets/static/bootstrap-icons/palette-fill.svg create mode 100644 assets/static/bootstrap-icons/palette.svg create mode 100644 assets/static/bootstrap-icons/palette2.svg create mode 100644 assets/static/bootstrap-icons/paperclip.svg create mode 100644 assets/static/bootstrap-icons/paragraph.svg create mode 100644 assets/static/bootstrap-icons/pass-fill.svg create mode 100644 assets/static/bootstrap-icons/pass.svg create mode 100644 assets/static/bootstrap-icons/passport-fill.svg create mode 100644 assets/static/bootstrap-icons/passport.svg create mode 100644 assets/static/bootstrap-icons/patch-check-fill.svg create mode 100644 assets/static/bootstrap-icons/patch-check.svg create mode 100644 assets/static/bootstrap-icons/patch-exclamation-fill.svg create mode 100644 assets/static/bootstrap-icons/patch-exclamation.svg create mode 100644 assets/static/bootstrap-icons/patch-minus-fill.svg create mode 100644 assets/static/bootstrap-icons/patch-minus.svg create mode 100644 assets/static/bootstrap-icons/patch-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/patch-plus.svg create mode 100644 assets/static/bootstrap-icons/patch-question-fill.svg create mode 100644 assets/static/bootstrap-icons/patch-question.svg create mode 100644 assets/static/bootstrap-icons/pause-btn-fill.svg create mode 100644 assets/static/bootstrap-icons/pause-btn.svg create mode 100644 assets/static/bootstrap-icons/pause-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/pause-circle.svg create mode 100644 assets/static/bootstrap-icons/pause-fill.svg create mode 100644 assets/static/bootstrap-icons/pause.svg create mode 100644 assets/static/bootstrap-icons/paypal.svg create mode 100644 assets/static/bootstrap-icons/pc-display-horizontal.svg create mode 100644 assets/static/bootstrap-icons/pc-display.svg create mode 100644 assets/static/bootstrap-icons/pc-horizontal.svg create mode 100644 assets/static/bootstrap-icons/pc.svg create mode 100644 assets/static/bootstrap-icons/pci-card-network.svg create mode 100644 assets/static/bootstrap-icons/pci-card-sound.svg create mode 100644 assets/static/bootstrap-icons/pci-card.svg create mode 100644 assets/static/bootstrap-icons/peace-fill.svg create mode 100644 assets/static/bootstrap-icons/peace.svg create mode 100644 assets/static/bootstrap-icons/pen-fill.svg create mode 100644 assets/static/bootstrap-icons/pen.svg create mode 100644 assets/static/bootstrap-icons/pencil-fill.svg create mode 100644 assets/static/bootstrap-icons/pencil-square.svg create mode 100644 assets/static/bootstrap-icons/pencil.svg create mode 100644 assets/static/bootstrap-icons/pentagon-fill.svg create mode 100644 assets/static/bootstrap-icons/pentagon-half.svg create mode 100644 assets/static/bootstrap-icons/pentagon.svg create mode 100644 assets/static/bootstrap-icons/people-fill.svg create mode 100644 assets/static/bootstrap-icons/people.svg create mode 100644 assets/static/bootstrap-icons/percent.svg create mode 100644 assets/static/bootstrap-icons/person-add.svg create mode 100644 assets/static/bootstrap-icons/person-arms-up.svg create mode 100644 assets/static/bootstrap-icons/person-badge-fill.svg create mode 100644 assets/static/bootstrap-icons/person-badge.svg create mode 100644 assets/static/bootstrap-icons/person-bounding-box.svg create mode 100644 assets/static/bootstrap-icons/person-check-fill.svg create mode 100644 assets/static/bootstrap-icons/person-check.svg create mode 100644 assets/static/bootstrap-icons/person-circle.svg create mode 100644 assets/static/bootstrap-icons/person-dash-fill.svg create mode 100644 assets/static/bootstrap-icons/person-dash.svg create mode 100644 assets/static/bootstrap-icons/person-down.svg create mode 100644 assets/static/bootstrap-icons/person-exclamation.svg create mode 100644 assets/static/bootstrap-icons/person-fill-add.svg create mode 100644 assets/static/bootstrap-icons/person-fill-check.svg create mode 100644 assets/static/bootstrap-icons/person-fill-dash.svg create mode 100644 assets/static/bootstrap-icons/person-fill-down.svg create mode 100644 assets/static/bootstrap-icons/person-fill-exclamation.svg create mode 100644 assets/static/bootstrap-icons/person-fill-gear.svg create mode 100644 assets/static/bootstrap-icons/person-fill-lock.svg create mode 100644 assets/static/bootstrap-icons/person-fill-slash.svg create mode 100644 assets/static/bootstrap-icons/person-fill-up.svg create mode 100644 assets/static/bootstrap-icons/person-fill-x.svg create mode 100644 assets/static/bootstrap-icons/person-fill.svg create mode 100644 assets/static/bootstrap-icons/person-gear.svg create mode 100644 assets/static/bootstrap-icons/person-heart.svg create mode 100644 assets/static/bootstrap-icons/person-hearts.svg create mode 100644 assets/static/bootstrap-icons/person-lines-fill.svg create mode 100644 assets/static/bootstrap-icons/person-lock.svg create mode 100644 assets/static/bootstrap-icons/person-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/person-plus.svg create mode 100644 assets/static/bootstrap-icons/person-raised-hand.svg create mode 100644 assets/static/bootstrap-icons/person-rolodex.svg create mode 100644 assets/static/bootstrap-icons/person-slash.svg create mode 100644 assets/static/bootstrap-icons/person-square.svg create mode 100644 assets/static/bootstrap-icons/person-standing-dress.svg create mode 100644 assets/static/bootstrap-icons/person-standing.svg create mode 100644 assets/static/bootstrap-icons/person-up.svg create mode 100644 assets/static/bootstrap-icons/person-vcard-fill.svg create mode 100644 assets/static/bootstrap-icons/person-vcard.svg create mode 100644 assets/static/bootstrap-icons/person-video.svg create mode 100644 assets/static/bootstrap-icons/person-video2.svg create mode 100644 assets/static/bootstrap-icons/person-video3.svg create mode 100644 assets/static/bootstrap-icons/person-walking.svg create mode 100644 assets/static/bootstrap-icons/person-wheelchair.svg create mode 100644 assets/static/bootstrap-icons/person-workspace.svg create mode 100644 assets/static/bootstrap-icons/person-x-fill.svg create mode 100644 assets/static/bootstrap-icons/person-x.svg create mode 100644 assets/static/bootstrap-icons/person.svg create mode 100644 assets/static/bootstrap-icons/phone-fill.svg create mode 100644 assets/static/bootstrap-icons/phone-flip.svg create mode 100644 assets/static/bootstrap-icons/phone-landscape-fill.svg create mode 100644 assets/static/bootstrap-icons/phone-landscape.svg create mode 100644 assets/static/bootstrap-icons/phone-vibrate-fill.svg create mode 100644 assets/static/bootstrap-icons/phone-vibrate.svg create mode 100644 assets/static/bootstrap-icons/phone.svg create mode 100644 assets/static/bootstrap-icons/pie-chart-fill.svg create mode 100644 assets/static/bootstrap-icons/pie-chart.svg create mode 100644 assets/static/bootstrap-icons/piggy-bank-fill.svg create mode 100644 assets/static/bootstrap-icons/piggy-bank.svg create mode 100644 assets/static/bootstrap-icons/pin-angle-fill.svg create mode 100644 assets/static/bootstrap-icons/pin-angle.svg create mode 100644 assets/static/bootstrap-icons/pin-fill.svg create mode 100644 assets/static/bootstrap-icons/pin-map-fill.svg create mode 100644 assets/static/bootstrap-icons/pin-map.svg create mode 100644 assets/static/bootstrap-icons/pin.svg create mode 100644 assets/static/bootstrap-icons/pinterest.svg create mode 100644 assets/static/bootstrap-icons/pip-fill.svg create mode 100644 assets/static/bootstrap-icons/pip.svg create mode 100644 assets/static/bootstrap-icons/play-btn-fill.svg create mode 100644 assets/static/bootstrap-icons/play-btn.svg create mode 100644 assets/static/bootstrap-icons/play-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/play-circle.svg create mode 100644 assets/static/bootstrap-icons/play-fill.svg create mode 100644 assets/static/bootstrap-icons/play.svg create mode 100644 assets/static/bootstrap-icons/playstation.svg create mode 100644 assets/static/bootstrap-icons/plug-fill.svg create mode 100644 assets/static/bootstrap-icons/plug.svg create mode 100644 assets/static/bootstrap-icons/plugin.svg create mode 100644 assets/static/bootstrap-icons/plus-circle-dotted.svg create mode 100644 assets/static/bootstrap-icons/plus-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/plus-circle.svg create mode 100644 assets/static/bootstrap-icons/plus-lg.svg create mode 100644 assets/static/bootstrap-icons/plus-slash-minus.svg create mode 100644 assets/static/bootstrap-icons/plus-square-dotted.svg create mode 100644 assets/static/bootstrap-icons/plus-square-fill.svg create mode 100644 assets/static/bootstrap-icons/plus-square.svg create mode 100644 assets/static/bootstrap-icons/plus.svg create mode 100644 assets/static/bootstrap-icons/postage-fill.svg create mode 100644 assets/static/bootstrap-icons/postage-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/postage-heart.svg create mode 100644 assets/static/bootstrap-icons/postage.svg create mode 100644 assets/static/bootstrap-icons/postcard-fill.svg create mode 100644 assets/static/bootstrap-icons/postcard-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/postcard-heart.svg create mode 100644 assets/static/bootstrap-icons/postcard.svg create mode 100644 assets/static/bootstrap-icons/power.svg create mode 100644 assets/static/bootstrap-icons/prescription.svg create mode 100644 assets/static/bootstrap-icons/prescription2.svg create mode 100644 assets/static/bootstrap-icons/printer-fill.svg create mode 100644 assets/static/bootstrap-icons/printer.svg create mode 100644 assets/static/bootstrap-icons/projector-fill.svg create mode 100644 assets/static/bootstrap-icons/projector.svg create mode 100644 assets/static/bootstrap-icons/puzzle-fill.svg create mode 100644 assets/static/bootstrap-icons/puzzle.svg create mode 100644 assets/static/bootstrap-icons/qr-code-scan.svg create mode 100644 assets/static/bootstrap-icons/qr-code.svg create mode 100644 assets/static/bootstrap-icons/question-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/question-circle.svg create mode 100644 assets/static/bootstrap-icons/question-diamond-fill.svg create mode 100644 assets/static/bootstrap-icons/question-diamond.svg create mode 100644 assets/static/bootstrap-icons/question-lg.svg create mode 100644 assets/static/bootstrap-icons/question-octagon-fill.svg create mode 100644 assets/static/bootstrap-icons/question-octagon.svg create mode 100644 assets/static/bootstrap-icons/question-square-fill.svg create mode 100644 assets/static/bootstrap-icons/question-square.svg create mode 100644 assets/static/bootstrap-icons/question.svg create mode 100644 assets/static/bootstrap-icons/quora.svg create mode 100644 assets/static/bootstrap-icons/quote.svg create mode 100644 assets/static/bootstrap-icons/r-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/r-circle.svg create mode 100644 assets/static/bootstrap-icons/r-square-fill.svg create mode 100644 assets/static/bootstrap-icons/r-square.svg create mode 100644 assets/static/bootstrap-icons/radar.svg create mode 100644 assets/static/bootstrap-icons/radioactive.svg create mode 100644 assets/static/bootstrap-icons/rainbow.svg create mode 100644 assets/static/bootstrap-icons/receipt-cutoff.svg create mode 100644 assets/static/bootstrap-icons/receipt.svg create mode 100644 assets/static/bootstrap-icons/reception-0.svg create mode 100644 assets/static/bootstrap-icons/reception-1.svg create mode 100644 assets/static/bootstrap-icons/reception-2.svg create mode 100644 assets/static/bootstrap-icons/reception-3.svg create mode 100644 assets/static/bootstrap-icons/reception-4.svg create mode 100644 assets/static/bootstrap-icons/record-btn-fill.svg create mode 100644 assets/static/bootstrap-icons/record-btn.svg create mode 100644 assets/static/bootstrap-icons/record-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/record-circle.svg create mode 100644 assets/static/bootstrap-icons/record-fill.svg create mode 100644 assets/static/bootstrap-icons/record.svg create mode 100644 assets/static/bootstrap-icons/record2-fill.svg create mode 100644 assets/static/bootstrap-icons/record2.svg create mode 100644 assets/static/bootstrap-icons/recycle.svg create mode 100644 assets/static/bootstrap-icons/reddit.svg create mode 100644 assets/static/bootstrap-icons/regex.svg create mode 100644 assets/static/bootstrap-icons/repeat-1.svg create mode 100644 assets/static/bootstrap-icons/repeat.svg create mode 100644 assets/static/bootstrap-icons/reply-all-fill.svg create mode 100644 assets/static/bootstrap-icons/reply-all.svg create mode 100644 assets/static/bootstrap-icons/reply-fill.svg create mode 100644 assets/static/bootstrap-icons/reply.svg create mode 100644 assets/static/bootstrap-icons/rewind-btn-fill.svg create mode 100644 assets/static/bootstrap-icons/rewind-btn.svg create mode 100644 assets/static/bootstrap-icons/rewind-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/rewind-circle.svg create mode 100644 assets/static/bootstrap-icons/rewind-fill.svg create mode 100644 assets/static/bootstrap-icons/rewind.svg create mode 100644 assets/static/bootstrap-icons/robot.svg create mode 100644 assets/static/bootstrap-icons/rocket-fill.svg create mode 100644 assets/static/bootstrap-icons/rocket-takeoff-fill.svg create mode 100644 assets/static/bootstrap-icons/rocket-takeoff.svg create mode 100644 assets/static/bootstrap-icons/rocket.svg create mode 100644 assets/static/bootstrap-icons/router-fill.svg create mode 100644 assets/static/bootstrap-icons/router.svg create mode 100644 assets/static/bootstrap-icons/rss-fill.svg create mode 100644 assets/static/bootstrap-icons/rss.svg create mode 100644 assets/static/bootstrap-icons/rulers.svg create mode 100644 assets/static/bootstrap-icons/safe-fill.svg create mode 100644 assets/static/bootstrap-icons/safe.svg create mode 100644 assets/static/bootstrap-icons/safe2-fill.svg create mode 100644 assets/static/bootstrap-icons/safe2.svg create mode 100644 assets/static/bootstrap-icons/save-fill.svg create mode 100644 assets/static/bootstrap-icons/save.svg create mode 100644 assets/static/bootstrap-icons/save2-fill.svg create mode 100644 assets/static/bootstrap-icons/save2.svg create mode 100644 assets/static/bootstrap-icons/scissors.svg create mode 100644 assets/static/bootstrap-icons/scooter.svg create mode 100644 assets/static/bootstrap-icons/screwdriver.svg create mode 100644 assets/static/bootstrap-icons/sd-card-fill.svg create mode 100644 assets/static/bootstrap-icons/sd-card.svg create mode 100644 assets/static/bootstrap-icons/search-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/search-heart.svg create mode 100644 assets/static/bootstrap-icons/search.svg create mode 100644 assets/static/bootstrap-icons/segmented-nav.svg create mode 100644 assets/static/bootstrap-icons/send-arrow-down-fill.svg create mode 100644 assets/static/bootstrap-icons/send-arrow-down.svg create mode 100644 assets/static/bootstrap-icons/send-arrow-up-fill.svg create mode 100644 assets/static/bootstrap-icons/send-arrow-up.svg create mode 100644 assets/static/bootstrap-icons/send-check-fill.svg create mode 100644 assets/static/bootstrap-icons/send-check.svg create mode 100644 assets/static/bootstrap-icons/send-dash-fill.svg create mode 100644 assets/static/bootstrap-icons/send-dash.svg create mode 100644 assets/static/bootstrap-icons/send-exclamation-fill.svg create mode 100644 assets/static/bootstrap-icons/send-exclamation.svg create mode 100644 assets/static/bootstrap-icons/send-fill.svg create mode 100644 assets/static/bootstrap-icons/send-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/send-plus.svg create mode 100644 assets/static/bootstrap-icons/send-slash-fill.svg create mode 100644 assets/static/bootstrap-icons/send-slash.svg create mode 100644 assets/static/bootstrap-icons/send-x-fill.svg create mode 100644 assets/static/bootstrap-icons/send-x.svg create mode 100644 assets/static/bootstrap-icons/send.svg create mode 100644 assets/static/bootstrap-icons/server.svg create mode 100644 assets/static/bootstrap-icons/shadows.svg create mode 100644 assets/static/bootstrap-icons/share-fill.svg create mode 100644 assets/static/bootstrap-icons/share.svg create mode 100644 assets/static/bootstrap-icons/shield-check.svg create mode 100644 assets/static/bootstrap-icons/shield-exclamation.svg create mode 100644 assets/static/bootstrap-icons/shield-fill-check.svg create mode 100644 assets/static/bootstrap-icons/shield-fill-exclamation.svg create mode 100644 assets/static/bootstrap-icons/shield-fill-minus.svg create mode 100644 assets/static/bootstrap-icons/shield-fill-plus.svg create mode 100644 assets/static/bootstrap-icons/shield-fill-x.svg create mode 100644 assets/static/bootstrap-icons/shield-fill.svg create mode 100644 assets/static/bootstrap-icons/shield-lock-fill.svg create mode 100644 assets/static/bootstrap-icons/shield-lock.svg create mode 100644 assets/static/bootstrap-icons/shield-minus.svg create mode 100644 assets/static/bootstrap-icons/shield-plus.svg create mode 100644 assets/static/bootstrap-icons/shield-shaded.svg create mode 100644 assets/static/bootstrap-icons/shield-slash-fill.svg create mode 100644 assets/static/bootstrap-icons/shield-slash.svg create mode 100644 assets/static/bootstrap-icons/shield-x.svg create mode 100644 assets/static/bootstrap-icons/shield.svg create mode 100644 assets/static/bootstrap-icons/shift-fill.svg create mode 100644 assets/static/bootstrap-icons/shift.svg create mode 100644 assets/static/bootstrap-icons/shop-window.svg create mode 100644 assets/static/bootstrap-icons/shop.svg create mode 100644 assets/static/bootstrap-icons/shuffle.svg create mode 100644 assets/static/bootstrap-icons/sign-dead-end-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-dead-end.svg create mode 100644 assets/static/bootstrap-icons/sign-do-not-enter-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-do-not-enter.svg create mode 100644 assets/static/bootstrap-icons/sign-intersection-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-intersection-side-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-intersection-side.svg create mode 100644 assets/static/bootstrap-icons/sign-intersection-t-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-intersection-t.svg create mode 100644 assets/static/bootstrap-icons/sign-intersection-y-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-intersection-y.svg create mode 100644 assets/static/bootstrap-icons/sign-intersection.svg create mode 100644 assets/static/bootstrap-icons/sign-merge-left-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-merge-left.svg create mode 100644 assets/static/bootstrap-icons/sign-merge-right-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-merge-right.svg create mode 100644 assets/static/bootstrap-icons/sign-no-left-turn-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-no-left-turn.svg create mode 100644 assets/static/bootstrap-icons/sign-no-parking-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-no-parking.svg create mode 100644 assets/static/bootstrap-icons/sign-no-right-turn-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-no-right-turn.svg create mode 100644 assets/static/bootstrap-icons/sign-railroad-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-railroad.svg create mode 100644 assets/static/bootstrap-icons/sign-stop-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-stop-lights-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-stop-lights.svg create mode 100644 assets/static/bootstrap-icons/sign-stop.svg create mode 100644 assets/static/bootstrap-icons/sign-turn-left-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-turn-left.svg create mode 100644 assets/static/bootstrap-icons/sign-turn-right-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-turn-right.svg create mode 100644 assets/static/bootstrap-icons/sign-turn-slight-left-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-turn-slight-left.svg create mode 100644 assets/static/bootstrap-icons/sign-turn-slight-right-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-turn-slight-right.svg create mode 100644 assets/static/bootstrap-icons/sign-yield-fill.svg create mode 100644 assets/static/bootstrap-icons/sign-yield.svg create mode 100644 assets/static/bootstrap-icons/signal.svg create mode 100644 assets/static/bootstrap-icons/signpost-2-fill.svg create mode 100644 assets/static/bootstrap-icons/signpost-2.svg create mode 100644 assets/static/bootstrap-icons/signpost-fill.svg create mode 100644 assets/static/bootstrap-icons/signpost-split-fill.svg create mode 100644 assets/static/bootstrap-icons/signpost-split.svg create mode 100644 assets/static/bootstrap-icons/signpost.svg create mode 100644 assets/static/bootstrap-icons/sim-fill.svg create mode 100644 assets/static/bootstrap-icons/sim-slash-fill.svg create mode 100644 assets/static/bootstrap-icons/sim-slash.svg create mode 100644 assets/static/bootstrap-icons/sim.svg create mode 100644 assets/static/bootstrap-icons/sina-weibo.svg create mode 100644 assets/static/bootstrap-icons/skip-backward-btn-fill.svg create mode 100644 assets/static/bootstrap-icons/skip-backward-btn.svg create mode 100644 assets/static/bootstrap-icons/skip-backward-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/skip-backward-circle.svg create mode 100644 assets/static/bootstrap-icons/skip-backward-fill.svg create mode 100644 assets/static/bootstrap-icons/skip-backward.svg create mode 100644 assets/static/bootstrap-icons/skip-end-btn-fill.svg create mode 100644 assets/static/bootstrap-icons/skip-end-btn.svg create mode 100644 assets/static/bootstrap-icons/skip-end-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/skip-end-circle.svg create mode 100644 assets/static/bootstrap-icons/skip-end-fill.svg create mode 100644 assets/static/bootstrap-icons/skip-end.svg create mode 100644 assets/static/bootstrap-icons/skip-forward-btn-fill.svg create mode 100644 assets/static/bootstrap-icons/skip-forward-btn.svg create mode 100644 assets/static/bootstrap-icons/skip-forward-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/skip-forward-circle.svg create mode 100644 assets/static/bootstrap-icons/skip-forward-fill.svg create mode 100644 assets/static/bootstrap-icons/skip-forward.svg create mode 100644 assets/static/bootstrap-icons/skip-start-btn-fill.svg create mode 100644 assets/static/bootstrap-icons/skip-start-btn.svg create mode 100644 assets/static/bootstrap-icons/skip-start-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/skip-start-circle.svg create mode 100644 assets/static/bootstrap-icons/skip-start-fill.svg create mode 100644 assets/static/bootstrap-icons/skip-start.svg create mode 100644 assets/static/bootstrap-icons/skype.svg create mode 100644 assets/static/bootstrap-icons/slack.svg create mode 100644 assets/static/bootstrap-icons/slash-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/slash-circle.svg create mode 100644 assets/static/bootstrap-icons/slash-lg.svg create mode 100644 assets/static/bootstrap-icons/slash-square-fill.svg create mode 100644 assets/static/bootstrap-icons/slash-square.svg create mode 100644 assets/static/bootstrap-icons/slash.svg create mode 100644 assets/static/bootstrap-icons/sliders.svg create mode 100644 assets/static/bootstrap-icons/sliders2-vertical.svg create mode 100644 assets/static/bootstrap-icons/sliders2.svg create mode 100644 assets/static/bootstrap-icons/smartwatch.svg create mode 100644 assets/static/bootstrap-icons/snapchat.svg create mode 100644 assets/static/bootstrap-icons/snow.svg create mode 100644 assets/static/bootstrap-icons/snow2.svg create mode 100644 assets/static/bootstrap-icons/snow3.svg create mode 100644 assets/static/bootstrap-icons/sort-alpha-down-alt.svg create mode 100644 assets/static/bootstrap-icons/sort-alpha-down.svg create mode 100644 assets/static/bootstrap-icons/sort-alpha-up-alt.svg create mode 100644 assets/static/bootstrap-icons/sort-alpha-up.svg create mode 100644 assets/static/bootstrap-icons/sort-down-alt.svg create mode 100644 assets/static/bootstrap-icons/sort-down.svg create mode 100644 assets/static/bootstrap-icons/sort-numeric-down-alt.svg create mode 100644 assets/static/bootstrap-icons/sort-numeric-down.svg create mode 100644 assets/static/bootstrap-icons/sort-numeric-up-alt.svg create mode 100644 assets/static/bootstrap-icons/sort-numeric-up.svg create mode 100644 assets/static/bootstrap-icons/sort-up-alt.svg create mode 100644 assets/static/bootstrap-icons/sort-up.svg create mode 100644 assets/static/bootstrap-icons/soundwave.svg create mode 100644 assets/static/bootstrap-icons/sourceforge.svg create mode 100644 assets/static/bootstrap-icons/speaker-fill.svg create mode 100644 assets/static/bootstrap-icons/speaker.svg create mode 100644 assets/static/bootstrap-icons/speedometer.svg create mode 100644 assets/static/bootstrap-icons/speedometer2.svg create mode 100644 assets/static/bootstrap-icons/spellcheck.svg create mode 100644 assets/static/bootstrap-icons/spotify.svg create mode 100644 assets/static/bootstrap-icons/square-fill.svg create mode 100644 assets/static/bootstrap-icons/square-half.svg create mode 100644 assets/static/bootstrap-icons/square.svg create mode 100644 assets/static/bootstrap-icons/stack-overflow.svg create mode 100644 assets/static/bootstrap-icons/stack.svg create mode 100644 assets/static/bootstrap-icons/star-fill.svg create mode 100644 assets/static/bootstrap-icons/star-half.svg create mode 100644 assets/static/bootstrap-icons/star.svg create mode 100644 assets/static/bootstrap-icons/stars.svg create mode 100644 assets/static/bootstrap-icons/steam.svg create mode 100644 assets/static/bootstrap-icons/stickies-fill.svg create mode 100644 assets/static/bootstrap-icons/stickies.svg create mode 100644 assets/static/bootstrap-icons/sticky-fill.svg create mode 100644 assets/static/bootstrap-icons/sticky.svg create mode 100644 assets/static/bootstrap-icons/stop-btn-fill.svg create mode 100644 assets/static/bootstrap-icons/stop-btn.svg create mode 100644 assets/static/bootstrap-icons/stop-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/stop-circle.svg create mode 100644 assets/static/bootstrap-icons/stop-fill.svg create mode 100644 assets/static/bootstrap-icons/stop.svg create mode 100644 assets/static/bootstrap-icons/stoplights-fill.svg create mode 100644 assets/static/bootstrap-icons/stoplights.svg create mode 100644 assets/static/bootstrap-icons/stopwatch-fill.svg create mode 100644 assets/static/bootstrap-icons/stopwatch.svg create mode 100644 assets/static/bootstrap-icons/strava.svg create mode 100644 assets/static/bootstrap-icons/stripe.svg create mode 100644 assets/static/bootstrap-icons/subscript.svg create mode 100644 assets/static/bootstrap-icons/substack.svg create mode 100644 assets/static/bootstrap-icons/subtract.svg create mode 100644 assets/static/bootstrap-icons/suit-club-fill.svg create mode 100644 assets/static/bootstrap-icons/suit-club.svg create mode 100644 assets/static/bootstrap-icons/suit-diamond-fill.svg create mode 100644 assets/static/bootstrap-icons/suit-diamond.svg create mode 100644 assets/static/bootstrap-icons/suit-heart-fill.svg create mode 100644 assets/static/bootstrap-icons/suit-heart.svg create mode 100644 assets/static/bootstrap-icons/suit-spade-fill.svg create mode 100644 assets/static/bootstrap-icons/suit-spade.svg create mode 100644 assets/static/bootstrap-icons/suitcase-fill.svg create mode 100644 assets/static/bootstrap-icons/suitcase-lg-fill.svg create mode 100644 assets/static/bootstrap-icons/suitcase-lg.svg create mode 100644 assets/static/bootstrap-icons/suitcase.svg create mode 100644 assets/static/bootstrap-icons/suitcase2-fill.svg create mode 100644 assets/static/bootstrap-icons/suitcase2.svg create mode 100644 assets/static/bootstrap-icons/sun-fill.svg create mode 100644 assets/static/bootstrap-icons/sun.svg create mode 100644 assets/static/bootstrap-icons/sunglasses.svg create mode 100644 assets/static/bootstrap-icons/sunrise-fill.svg create mode 100644 assets/static/bootstrap-icons/sunrise.svg create mode 100644 assets/static/bootstrap-icons/sunset-fill.svg create mode 100644 assets/static/bootstrap-icons/sunset.svg create mode 100644 assets/static/bootstrap-icons/superscript.svg create mode 100644 assets/static/bootstrap-icons/symmetry-horizontal.svg create mode 100644 assets/static/bootstrap-icons/symmetry-vertical.svg create mode 100644 assets/static/bootstrap-icons/table.svg create mode 100644 assets/static/bootstrap-icons/tablet-fill.svg create mode 100644 assets/static/bootstrap-icons/tablet-landscape-fill.svg create mode 100644 assets/static/bootstrap-icons/tablet-landscape.svg create mode 100644 assets/static/bootstrap-icons/tablet.svg create mode 100644 assets/static/bootstrap-icons/tag-fill.svg create mode 100644 assets/static/bootstrap-icons/tag.svg create mode 100644 assets/static/bootstrap-icons/tags-fill.svg create mode 100644 assets/static/bootstrap-icons/tags.svg create mode 100644 assets/static/bootstrap-icons/taxi-front-fill.svg create mode 100644 assets/static/bootstrap-icons/taxi-front.svg create mode 100644 assets/static/bootstrap-icons/telegram.svg create mode 100644 assets/static/bootstrap-icons/telephone-fill.svg create mode 100644 assets/static/bootstrap-icons/telephone-forward-fill.svg create mode 100644 assets/static/bootstrap-icons/telephone-forward.svg create mode 100644 assets/static/bootstrap-icons/telephone-inbound-fill.svg create mode 100644 assets/static/bootstrap-icons/telephone-inbound.svg create mode 100644 assets/static/bootstrap-icons/telephone-minus-fill.svg create mode 100644 assets/static/bootstrap-icons/telephone-minus.svg create mode 100644 assets/static/bootstrap-icons/telephone-outbound-fill.svg create mode 100644 assets/static/bootstrap-icons/telephone-outbound.svg create mode 100644 assets/static/bootstrap-icons/telephone-plus-fill.svg create mode 100644 assets/static/bootstrap-icons/telephone-plus.svg create mode 100644 assets/static/bootstrap-icons/telephone-x-fill.svg create mode 100644 assets/static/bootstrap-icons/telephone-x.svg create mode 100644 assets/static/bootstrap-icons/telephone.svg create mode 100644 assets/static/bootstrap-icons/tencent-qq.svg create mode 100644 assets/static/bootstrap-icons/terminal-dash.svg create mode 100644 assets/static/bootstrap-icons/terminal-fill.svg create mode 100644 assets/static/bootstrap-icons/terminal-plus.svg create mode 100644 assets/static/bootstrap-icons/terminal-split.svg create mode 100644 assets/static/bootstrap-icons/terminal-x.svg create mode 100644 assets/static/bootstrap-icons/terminal.svg create mode 100644 assets/static/bootstrap-icons/text-center.svg create mode 100644 assets/static/bootstrap-icons/text-indent-left.svg create mode 100644 assets/static/bootstrap-icons/text-indent-right.svg create mode 100644 assets/static/bootstrap-icons/text-left.svg create mode 100644 assets/static/bootstrap-icons/text-paragraph.svg create mode 100644 assets/static/bootstrap-icons/text-right.svg create mode 100644 assets/static/bootstrap-icons/text-wrap.svg create mode 100644 assets/static/bootstrap-icons/textarea-resize.svg create mode 100644 assets/static/bootstrap-icons/textarea-t.svg create mode 100644 assets/static/bootstrap-icons/textarea.svg create mode 100644 assets/static/bootstrap-icons/thermometer-half.svg create mode 100644 assets/static/bootstrap-icons/thermometer-high.svg create mode 100644 assets/static/bootstrap-icons/thermometer-low.svg create mode 100644 assets/static/bootstrap-icons/thermometer-snow.svg create mode 100644 assets/static/bootstrap-icons/thermometer-sun.svg create mode 100644 assets/static/bootstrap-icons/thermometer.svg create mode 100644 assets/static/bootstrap-icons/threads-fill.svg create mode 100644 assets/static/bootstrap-icons/threads.svg create mode 100644 assets/static/bootstrap-icons/three-dots-vertical.svg create mode 100644 assets/static/bootstrap-icons/three-dots.svg create mode 100644 assets/static/bootstrap-icons/thunderbolt-fill.svg create mode 100644 assets/static/bootstrap-icons/thunderbolt.svg create mode 100644 assets/static/bootstrap-icons/ticket-detailed-fill.svg create mode 100644 assets/static/bootstrap-icons/ticket-detailed.svg create mode 100644 assets/static/bootstrap-icons/ticket-fill.svg create mode 100644 assets/static/bootstrap-icons/ticket-perforated-fill.svg create mode 100644 assets/static/bootstrap-icons/ticket-perforated.svg create mode 100644 assets/static/bootstrap-icons/ticket.svg create mode 100644 assets/static/bootstrap-icons/tiktok.svg create mode 100644 assets/static/bootstrap-icons/toggle-off.svg create mode 100644 assets/static/bootstrap-icons/toggle-on.svg create mode 100644 assets/static/bootstrap-icons/toggle2-off.svg create mode 100644 assets/static/bootstrap-icons/toggle2-on.svg create mode 100644 assets/static/bootstrap-icons/toggles.svg create mode 100644 assets/static/bootstrap-icons/toggles2.svg create mode 100644 assets/static/bootstrap-icons/tools.svg create mode 100644 assets/static/bootstrap-icons/tornado.svg create mode 100644 assets/static/bootstrap-icons/train-freight-front-fill.svg create mode 100644 assets/static/bootstrap-icons/train-freight-front.svg create mode 100644 assets/static/bootstrap-icons/train-front-fill.svg create mode 100644 assets/static/bootstrap-icons/train-front.svg create mode 100644 assets/static/bootstrap-icons/train-lightrail-front-fill.svg create mode 100644 assets/static/bootstrap-icons/train-lightrail-front.svg create mode 100644 assets/static/bootstrap-icons/translate.svg create mode 100644 assets/static/bootstrap-icons/transparency.svg create mode 100644 assets/static/bootstrap-icons/trash-fill.svg create mode 100644 assets/static/bootstrap-icons/trash.svg create mode 100644 assets/static/bootstrap-icons/trash2-fill.svg create mode 100644 assets/static/bootstrap-icons/trash2.svg create mode 100644 assets/static/bootstrap-icons/trash3-fill.svg create mode 100644 assets/static/bootstrap-icons/trash3.svg create mode 100644 assets/static/bootstrap-icons/tree-fill.svg create mode 100644 assets/static/bootstrap-icons/tree.svg create mode 100644 assets/static/bootstrap-icons/trello.svg create mode 100644 assets/static/bootstrap-icons/triangle-fill.svg create mode 100644 assets/static/bootstrap-icons/triangle-half.svg create mode 100644 assets/static/bootstrap-icons/triangle.svg create mode 100644 assets/static/bootstrap-icons/trophy-fill.svg create mode 100644 assets/static/bootstrap-icons/trophy.svg create mode 100644 assets/static/bootstrap-icons/tropical-storm.svg create mode 100644 assets/static/bootstrap-icons/truck-flatbed.svg create mode 100644 assets/static/bootstrap-icons/truck-front-fill.svg create mode 100644 assets/static/bootstrap-icons/truck-front.svg create mode 100644 assets/static/bootstrap-icons/truck.svg create mode 100644 assets/static/bootstrap-icons/tsunami.svg create mode 100644 assets/static/bootstrap-icons/tv-fill.svg create mode 100644 assets/static/bootstrap-icons/tv.svg create mode 100644 assets/static/bootstrap-icons/twitch.svg create mode 100644 assets/static/bootstrap-icons/twitter-x.svg create mode 100644 assets/static/bootstrap-icons/twitter.svg create mode 100644 assets/static/bootstrap-icons/type-bold.svg create mode 100644 assets/static/bootstrap-icons/type-h1.svg create mode 100644 assets/static/bootstrap-icons/type-h2.svg create mode 100644 assets/static/bootstrap-icons/type-h3.svg create mode 100644 assets/static/bootstrap-icons/type-h4.svg create mode 100644 assets/static/bootstrap-icons/type-h5.svg create mode 100644 assets/static/bootstrap-icons/type-h6.svg create mode 100644 assets/static/bootstrap-icons/type-italic.svg create mode 100644 assets/static/bootstrap-icons/type-strikethrough.svg create mode 100644 assets/static/bootstrap-icons/type-underline.svg create mode 100644 assets/static/bootstrap-icons/type.svg create mode 100644 assets/static/bootstrap-icons/ubuntu.svg create mode 100644 assets/static/bootstrap-icons/ui-checks-grid.svg create mode 100644 assets/static/bootstrap-icons/ui-checks.svg create mode 100644 assets/static/bootstrap-icons/ui-radios-grid.svg create mode 100644 assets/static/bootstrap-icons/ui-radios.svg create mode 100644 assets/static/bootstrap-icons/umbrella-fill.svg create mode 100644 assets/static/bootstrap-icons/umbrella.svg create mode 100644 assets/static/bootstrap-icons/unindent.svg create mode 100644 assets/static/bootstrap-icons/union.svg create mode 100644 assets/static/bootstrap-icons/unity.svg create mode 100644 assets/static/bootstrap-icons/universal-access-circle.svg create mode 100644 assets/static/bootstrap-icons/universal-access.svg create mode 100644 assets/static/bootstrap-icons/unlock-fill.svg create mode 100644 assets/static/bootstrap-icons/unlock.svg create mode 100644 assets/static/bootstrap-icons/upc-scan.svg create mode 100644 assets/static/bootstrap-icons/upc.svg create mode 100644 assets/static/bootstrap-icons/upload.svg create mode 100644 assets/static/bootstrap-icons/usb-c-fill.svg create mode 100644 assets/static/bootstrap-icons/usb-c.svg create mode 100644 assets/static/bootstrap-icons/usb-drive-fill.svg create mode 100644 assets/static/bootstrap-icons/usb-drive.svg create mode 100644 assets/static/bootstrap-icons/usb-fill.svg create mode 100644 assets/static/bootstrap-icons/usb-micro-fill.svg create mode 100644 assets/static/bootstrap-icons/usb-micro.svg create mode 100644 assets/static/bootstrap-icons/usb-mini-fill.svg create mode 100644 assets/static/bootstrap-icons/usb-mini.svg create mode 100644 assets/static/bootstrap-icons/usb-plug-fill.svg create mode 100644 assets/static/bootstrap-icons/usb-plug.svg create mode 100644 assets/static/bootstrap-icons/usb-symbol.svg create mode 100644 assets/static/bootstrap-icons/usb.svg create mode 100644 assets/static/bootstrap-icons/valentine.svg create mode 100644 assets/static/bootstrap-icons/valentine2.svg create mode 100644 assets/static/bootstrap-icons/vector-pen.svg create mode 100644 assets/static/bootstrap-icons/view-list.svg create mode 100644 assets/static/bootstrap-icons/view-stacked.svg create mode 100644 assets/static/bootstrap-icons/vignette.svg create mode 100644 assets/static/bootstrap-icons/vimeo.svg create mode 100644 assets/static/bootstrap-icons/vinyl-fill.svg create mode 100644 assets/static/bootstrap-icons/vinyl.svg create mode 100644 assets/static/bootstrap-icons/virus.svg create mode 100644 assets/static/bootstrap-icons/virus2.svg create mode 100644 assets/static/bootstrap-icons/voicemail.svg create mode 100644 assets/static/bootstrap-icons/volume-down-fill.svg create mode 100644 assets/static/bootstrap-icons/volume-down.svg create mode 100644 assets/static/bootstrap-icons/volume-mute-fill.svg create mode 100644 assets/static/bootstrap-icons/volume-mute.svg create mode 100644 assets/static/bootstrap-icons/volume-off-fill.svg create mode 100644 assets/static/bootstrap-icons/volume-off.svg create mode 100644 assets/static/bootstrap-icons/volume-up-fill.svg create mode 100644 assets/static/bootstrap-icons/volume-up.svg create mode 100644 assets/static/bootstrap-icons/vr.svg create mode 100644 assets/static/bootstrap-icons/wallet-fill.svg create mode 100644 assets/static/bootstrap-icons/wallet.svg create mode 100644 assets/static/bootstrap-icons/wallet2.svg create mode 100644 assets/static/bootstrap-icons/watch.svg create mode 100644 assets/static/bootstrap-icons/water.svg create mode 100644 assets/static/bootstrap-icons/webcam-fill.svg create mode 100644 assets/static/bootstrap-icons/webcam.svg create mode 100644 assets/static/bootstrap-icons/wechat.svg create mode 100644 assets/static/bootstrap-icons/whatsapp.svg create mode 100644 assets/static/bootstrap-icons/wifi-1.svg create mode 100644 assets/static/bootstrap-icons/wifi-2.svg create mode 100644 assets/static/bootstrap-icons/wifi-off.svg create mode 100644 assets/static/bootstrap-icons/wifi.svg create mode 100644 assets/static/bootstrap-icons/wikipedia.svg create mode 100644 assets/static/bootstrap-icons/wind.svg create mode 100644 assets/static/bootstrap-icons/window-dash.svg create mode 100644 assets/static/bootstrap-icons/window-desktop.svg create mode 100644 assets/static/bootstrap-icons/window-dock.svg create mode 100644 assets/static/bootstrap-icons/window-fullscreen.svg create mode 100644 assets/static/bootstrap-icons/window-plus.svg create mode 100644 assets/static/bootstrap-icons/window-sidebar.svg create mode 100644 assets/static/bootstrap-icons/window-split.svg create mode 100644 assets/static/bootstrap-icons/window-stack.svg create mode 100644 assets/static/bootstrap-icons/window-x.svg create mode 100644 assets/static/bootstrap-icons/window.svg create mode 100644 assets/static/bootstrap-icons/windows.svg create mode 100644 assets/static/bootstrap-icons/wordpress.svg create mode 100644 assets/static/bootstrap-icons/wrench-adjustable-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/wrench-adjustable-circle.svg create mode 100644 assets/static/bootstrap-icons/wrench-adjustable.svg create mode 100644 assets/static/bootstrap-icons/wrench.svg create mode 100644 assets/static/bootstrap-icons/x-circle-fill.svg create mode 100644 assets/static/bootstrap-icons/x-circle.svg create mode 100644 assets/static/bootstrap-icons/x-diamond-fill.svg create mode 100644 assets/static/bootstrap-icons/x-diamond.svg create mode 100644 assets/static/bootstrap-icons/x-lg.svg create mode 100644 assets/static/bootstrap-icons/x-octagon-fill.svg create mode 100644 assets/static/bootstrap-icons/x-octagon.svg create mode 100644 assets/static/bootstrap-icons/x-square-fill.svg create mode 100644 assets/static/bootstrap-icons/x-square.svg create mode 100644 assets/static/bootstrap-icons/x.svg create mode 100644 assets/static/bootstrap-icons/xbox.svg create mode 100644 assets/static/bootstrap-icons/yelp.svg create mode 100644 assets/static/bootstrap-icons/yin-yang.svg create mode 100644 assets/static/bootstrap-icons/youtube.svg create mode 100644 assets/static/bootstrap-icons/zoom-in.svg create mode 100644 assets/static/bootstrap-icons/zoom-out.svg create mode 100644 assets/static/css/main.css create mode 100644 assets/static/easymde/easymde.min.css create mode 100644 assets/static/easymde/easymde.min.js create mode 100644 assets/static/img/.keep create mode 100644 assets/static/img/brainminder-icon.svg create mode 100644 assets/static/img/brainminder.svg create mode 100644 assets/static/img/icons/128x128.png create mode 100644 assets/static/img/icons/144x144.png create mode 100644 assets/static/img/icons/152x152.png create mode 100644 assets/static/img/icons/192x192.png create mode 100644 assets/static/img/icons/384x384.png create mode 100644 assets/static/img/icons/512x512.png create mode 100644 assets/static/img/icons/72x72.png create mode 100644 assets/static/img/icons/96x96.png create mode 100644 assets/static/img/screenshots/BrainMinder-screenshot-narrow-1.webp create mode 100644 assets/static/img/screenshots/BrainMinder-screenshot-narrow.webp create mode 100644 assets/static/img/screenshots/BrainMinder-screenshot-wide-1.webp create mode 100644 assets/static/img/screenshots/BrainMinder-screenshot-wide.webp create mode 100644 assets/static/js/.keep create mode 100644 assets/static/js/Sortable.min.js create mode 100644 assets/static/js/handlebars.js create mode 100644 assets/static/js/htmx/ext/ajax-header.js create mode 100644 assets/static/js/htmx/ext/alpine-morph.js create mode 100644 assets/static/js/htmx/ext/class-tools.js create mode 100644 assets/static/js/htmx/ext/client-side-templates.js create mode 100644 assets/static/js/htmx/ext/debug.js create mode 100644 assets/static/js/htmx/ext/disable-element.js create mode 100644 assets/static/js/htmx/ext/event-header.js create mode 100644 assets/static/js/htmx/ext/head-support.js create mode 100644 assets/static/js/htmx/ext/htmx-shoelace.js create mode 100644 assets/static/js/htmx/ext/include-vals.js create mode 100644 assets/static/js/htmx/ext/json-enc.js create mode 100644 assets/static/js/htmx/ext/loading-states.js create mode 100644 assets/static/js/htmx/ext/method-override.js create mode 100644 assets/static/js/htmx/ext/morphdom-swap.js create mode 100644 assets/static/js/htmx/ext/multi-swap.js create mode 100644 assets/static/js/htmx/ext/path-deps.js create mode 100644 assets/static/js/htmx/ext/preload.js create mode 100644 assets/static/js/htmx/ext/rails-method.js create mode 100644 assets/static/js/htmx/ext/remove-me.js create mode 100644 assets/static/js/htmx/ext/response-targets.js create mode 100644 assets/static/js/htmx/ext/restored.js create mode 100644 assets/static/js/htmx/ext/sse.js create mode 100644 assets/static/js/htmx/ext/ws.js create mode 100644 assets/static/js/htmx/htmx.d.ts create mode 100644 assets/static/js/htmx/htmx.js create mode 100644 assets/static/js/htmx/htmx.min.js create mode 100644 assets/static/js/htmx/htmx.min.js.gz create mode 100644 assets/static/js/htmx/htmx.test.ts create mode 100644 assets/static/js/hyperscript.min.js create mode 100644 assets/static/js/main.js create mode 100644 assets/static/js/serviceWorker.js create mode 100644 assets/static/js/templates.js create mode 100644 assets/static/manifest.json create mode 100644 assets/templates/base.tmpl create mode 100644 assets/templates/categories/create_title.tmpl create mode 100644 assets/templates/categories/form.tmpl create mode 100644 assets/templates/categories/index.tmpl create mode 100644 assets/templates/categories/list.tmpl create mode 100644 assets/templates/categories/list_title.tmpl create mode 100644 assets/templates/categories/update_title.tmpl create mode 100644 assets/templates/full.tmpl create mode 100644 assets/templates/items/add_relation.tmpl create mode 100644 assets/templates/items/add_to_dashboard.tmpl create mode 100644 assets/templates/items/all_list.tmpl create mode 100644 assets/templates/items/all_list_rows.tmpl create mode 100644 assets/templates/items/all_list_title.tmpl create mode 100644 assets/templates/items/create_title.tmpl create mode 100644 assets/templates/items/fields.tmpl create mode 100644 assets/templates/items/form.tmpl create mode 100644 assets/templates/items/form_jscode.tmpl create mode 100644 assets/templates/items/index.tmpl create mode 100644 assets/templates/items/index_all.tmpl create mode 100644 assets/templates/items/list.tmpl create mode 100644 assets/templates/items/list_for_relations.tmpl create mode 100644 assets/templates/items/list_rows.tmpl create mode 100644 assets/templates/items/list_title.tmpl create mode 100644 assets/templates/items/read.tmpl create mode 100644 assets/templates/items/read_title.tmpl create mode 100644 assets/templates/items/relations.tmpl create mode 100644 assets/templates/items/relations_view.tmpl create mode 100644 assets/templates/items/remove_from_dashboard.tmpl create mode 100644 assets/templates/items/share.tmpl create mode 100644 assets/templates/items/update_title.tmpl create mode 100644 assets/templates/items/view.tmpl create mode 100644 assets/templates/notebooks/create_title.tmpl create mode 100644 assets/templates/notebooks/form.tmpl create mode 100644 assets/templates/notebooks/index.tmpl create mode 100644 assets/templates/notebooks/list.tmpl create mode 100644 assets/templates/notebooks/list_title.tmpl create mode 100644 assets/templates/notebooks/update_title.tmpl create mode 100644 assets/templates/pages/forgotten-password-confirmation.tmpl create mode 100644 assets/templates/pages/forgotten-password.tmpl create mode 100644 assets/templates/pages/home.tmpl create mode 100644 assets/templates/pages/home_items.tmpl create mode 100644 assets/templates/pages/home_title.tmpl create mode 100644 assets/templates/pages/login.tmpl create mode 100644 assets/templates/pages/password-reset-confirmation.tmpl create mode 100644 assets/templates/pages/password-reset.tmpl create mode 100644 assets/templates/pages/signup.tmpl create mode 100644 assets/templates/partials/footer.tmpl create mode 100644 assets/templates/partials/message.tmpl create mode 100644 assets/templates/partials/nav.tmpl create mode 100644 assets/templates/partials/notebooks-list.tmpl create mode 100644 assets/templates/partials/sidebar.tmpl create mode 100644 assets/templates/partials/types-list.tmpl create mode 100644 assets/templates/quickbox/add.tmpl create mode 100644 assets/templates/quickbox/list.tmpl create mode 100644 assets/templates/quickbox/transform.tmpl create mode 100644 assets/templates/types/create_title.tmpl create mode 100644 assets/templates/types/field_new.tmpl create mode 100644 assets/templates/types/fields.tmpl create mode 100644 assets/templates/types/form.tmpl create mode 100644 assets/templates/types/index.tmpl create mode 100644 assets/templates/types/list.tmpl create mode 100644 assets/templates/types/list_title.tmpl create mode 100644 assets/templates/types/update_title.tmpl create mode 100644 cmd/web/application.go create mode 100644 cmd/web/categories_handler.go create mode 100644 cmd/web/config.go create mode 100644 cmd/web/context.go create mode 100644 cmd/web/errors.go create mode 100644 cmd/web/handlers.go create mode 100644 cmd/web/helpers.go create mode 100644 cmd/web/items_handlers.go create mode 100644 cmd/web/main.go create mode 100644 cmd/web/middleware.go create mode 100644 cmd/web/notebooks_handlers.go create mode 100644 cmd/web/quickbox_handlers.go create mode 100644 cmd/web/routes.go create mode 100644 cmd/web/server.go create mode 100644 cmd/web/types_handlers.go create mode 100644 go.mod create mode 100644 go.sum create mode 100644 internal/cookies/cookies.go create mode 100644 internal/database/db.go create mode 100644 internal/database/password_resets.go create mode 100644 internal/database/users.go create mode 100644 internal/env/env.go create mode 100644 internal/funcs/funcs.go create mode 100644 internal/password/common.go create mode 100644 internal/password/hash.go create mode 100644 internal/request/forms.go create mode 100644 internal/request/json.go create mode 100644 internal/response/json.go create mode 100644 internal/response/metrics.go create mode 100644 internal/response/templates.go create mode 100644 internal/smtp/mailer.go create mode 100644 internal/token/token.go create mode 100644 internal/validator/helpers.go create mode 100644 internal/validator/validator.go create mode 100644 internal/version/version.go create mode 100644 models/base.go create mode 100644 models/category.go create mode 100644 models/constructors.go create mode 100644 models/field.go create mode 100644 models/item.go create mode 100644 models/notebook.go create mode 100644 models/quicknote.go create mode 100644 models/type.go create mode 100644 models/widget.go diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..7e35c18 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +deploy.sh +Makefile +README-AUTOSTRADA.html +README-AUTOSTRADA.MD +.vscode/launch.json diff --git a/assets/efs.go b/assets/efs.go new file mode 100644 index 0000000..4fe04bb --- /dev/null +++ b/assets/efs.go @@ -0,0 +1,8 @@ +package assets + +import ( + "embed" +) + +//go:embed "emails" "migrations" "templates" "static" +var EmbeddedFiles embed.FS diff --git a/assets/emails/example.tmpl b/assets/emails/example.tmpl new file mode 100644 index 0000000..f381541 --- /dev/null +++ b/assets/emails/example.tmpl @@ -0,0 +1,24 @@ +{{define "subject"}}Example subject{{end}} + +{{define "plainBody"}} +Hi {{.Name}}, + +This is an example body + +Sent at: {{now}} +{{end}} + +{{define "htmlBody"}} + + + + + + + +

Hi {{.Name}},

+

This is an example body

+

Sent at: {{now}}

+ + +{{end}} \ No newline at end of file diff --git a/assets/emails/forgotten-password.tmpl b/assets/emails/forgotten-password.tmpl new file mode 100644 index 0000000..9eb163e --- /dev/null +++ b/assets/emails/forgotten-password.tmpl @@ -0,0 +1,29 @@ +{{define "subject"}}Reset your password{{end}} + +{{define "plainBody"}} +Hi, + +Someone (hopefully you) has requested a password reset for your {{.BaseURL}} account. Follow the link below to set a new password: + +Please go to the following page and set a new password: + +{{.BaseURL}}/password-reset/{{.PlaintextToken}} + +If you don't wish to reset your password, disregard this email and no action will be taken. +{{end}} + +{{define "htmlBody"}} + + + + + + + +

Hi,

+

Someone (hopefully you) has requested a password reset for your {{.BaseURL}} account. Follow the link below to set a new password:

+

{{.BaseURL}}/password-reset/{{.PlaintextToken}}

+

If you don't wish to reset your password, disregard this email and no action will be taken.

+ + +{{end}} \ No newline at end of file diff --git a/assets/jstemplates/items/field-text.handlebars b/assets/jstemplates/items/field-text.handlebars new file mode 100644 index 0000000..8b24a76 --- /dev/null +++ b/assets/jstemplates/items/field-text.handlebars @@ -0,0 +1,4 @@ +
+
+
+
\ No newline at end of file diff --git a/assets/jstemplates/items/field-url.handlebars b/assets/jstemplates/items/field-url.handlebars new file mode 100644 index 0000000..b2c2c8f --- /dev/null +++ b/assets/jstemplates/items/field-url.handlebars @@ -0,0 +1,4 @@ +
+
+
+
\ No newline at end of file diff --git a/assets/migrations/000001_initalize_schema_migrations.down.sql b/assets/migrations/000001_initalize_schema_migrations.down.sql new file mode 100644 index 0000000..a1cab7f --- /dev/null +++ b/assets/migrations/000001_initalize_schema_migrations.down.sql @@ -0,0 +1 @@ +-- This file is deliberately empty. Don't edit or remove it. \ No newline at end of file diff --git a/assets/migrations/000001_initalize_schema_migrations.up.sql b/assets/migrations/000001_initalize_schema_migrations.up.sql new file mode 100644 index 0000000..a1cab7f --- /dev/null +++ b/assets/migrations/000001_initalize_schema_migrations.up.sql @@ -0,0 +1 @@ +-- This file is deliberately empty. Don't edit or remove it. \ No newline at end of file diff --git a/assets/migrations/000002_create_users_table.down.sql b/assets/migrations/000002_create_users_table.down.sql new file mode 100644 index 0000000..441087a --- /dev/null +++ b/assets/migrations/000002_create_users_table.down.sql @@ -0,0 +1 @@ +DROP TABLE users; \ No newline at end of file diff --git a/assets/migrations/000002_create_users_table.up.sql b/assets/migrations/000002_create_users_table.up.sql new file mode 100644 index 0000000..ab32a9b --- /dev/null +++ b/assets/migrations/000002_create_users_table.up.sql @@ -0,0 +1,6 @@ +CREATE TABLE users ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + created TIMESTAMP NOT NULL, + email TEXT NOT NULL UNIQUE, + hashed_password TEXT NOT NULL +); diff --git a/assets/migrations/000003_create_password_resets_table.down.sql b/assets/migrations/000003_create_password_resets_table.down.sql new file mode 100644 index 0000000..d56c5bc --- /dev/null +++ b/assets/migrations/000003_create_password_resets_table.down.sql @@ -0,0 +1,4 @@ +DROP INDEX idx_password_resets_user_id; + +DROP TABLE password_resets; + diff --git a/assets/migrations/000003_create_password_resets_table.up.sql b/assets/migrations/000003_create_password_resets_table.up.sql new file mode 100644 index 0000000..f8128a3 --- /dev/null +++ b/assets/migrations/000003_create_password_resets_table.up.sql @@ -0,0 +1,7 @@ +CREATE TABLE password_resets ( + hashed_token TEXT NOT NULL PRIMARY KEY, + user_id INTEGER NOT NULL, + expiry TIMESTAMP NOT NULL +); + +CREATE INDEX idx_password_resets_user_id ON password_resets(user_id); diff --git a/assets/migrations/000004_create_bm_category_table.down.sql b/assets/migrations/000004_create_bm_category_table.down.sql new file mode 100644 index 0000000..a3f1ca2 --- /dev/null +++ b/assets/migrations/000004_create_bm_category_table.down.sql @@ -0,0 +1 @@ +DROP TABLE bm_category; \ No newline at end of file diff --git a/assets/migrations/000004_create_bm_category_table.up.sql b/assets/migrations/000004_create_bm_category_table.up.sql new file mode 100644 index 0000000..e8e1aea --- /dev/null +++ b/assets/migrations/000004_create_bm_category_table.up.sql @@ -0,0 +1,7 @@ +CREATE TABLE bm_category ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + name TEXT, + parent_id INTEGER, + position INTEGER, + notebook_id INTEGER +); \ No newline at end of file diff --git a/assets/migrations/000005_create_bm_item_table.down.sql b/assets/migrations/000005_create_bm_item_table.down.sql new file mode 100644 index 0000000..c08d1a1 --- /dev/null +++ b/assets/migrations/000005_create_bm_item_table.down.sql @@ -0,0 +1 @@ +DROP TABLE bm_item; \ No newline at end of file diff --git a/assets/migrations/000005_create_bm_item_table.up.sql b/assets/migrations/000005_create_bm_item_table.up.sql new file mode 100644 index 0000000..d13746b --- /dev/null +++ b/assets/migrations/000005_create_bm_item_table.up.sql @@ -0,0 +1,17 @@ +CREATE TABLE bm_item ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + type_id INTEGER NOT NULL, + title TEXT NOT NULL, + summary TEXT DEFAULT '', + summary_rendered TEXT DEFAULT '', + description TEXT NOT NULL DEFAULT '', + description_rendered BLOB DEFAULT '', + tags TEXT DEFAULT ' ', + active INTEGER DEFAULT 1, + hidden INTEGER DEFAULT 0, + crypted INTEGER DEFAULT 0, + categories TEXT DEFAULT '', + notebooks TEXT DEFAULT '', + on_dashboard INTEGER DEFAULT 0, + on_dashboard_position INTEGER DEFAULT 0 +); \ No newline at end of file diff --git a/assets/migrations/000006_create_bm_item_fields_table.down.sql b/assets/migrations/000006_create_bm_item_fields_table.down.sql new file mode 100644 index 0000000..c08d1a1 --- /dev/null +++ b/assets/migrations/000006_create_bm_item_fields_table.down.sql @@ -0,0 +1 @@ +DROP TABLE bm_item; \ No newline at end of file diff --git a/assets/migrations/000006_create_bm_item_fields_table.up.sql b/assets/migrations/000006_create_bm_item_fields_table.up.sql new file mode 100644 index 0000000..2052706 --- /dev/null +++ b/assets/migrations/000006_create_bm_item_fields_table.up.sql @@ -0,0 +1,6 @@ +CREATE TABLE bm_item_fields ( + item_id INTEGER NOT NULL, + type_field_id INTEGER NOT NULL, + "value" TEXT NOT NULL, + "counter" INTEGER DEFAULT 0 +); \ No newline at end of file diff --git a/assets/migrations/000007_create_bm_item_keywords_table.down.sql b/assets/migrations/000007_create_bm_item_keywords_table.down.sql new file mode 100644 index 0000000..9fb58bd --- /dev/null +++ b/assets/migrations/000007_create_bm_item_keywords_table.down.sql @@ -0,0 +1 @@ +DROP TABLE bm_item_keywords; \ No newline at end of file diff --git a/assets/migrations/000007_create_bm_item_keywords_table.up.sql b/assets/migrations/000007_create_bm_item_keywords_table.up.sql new file mode 100644 index 0000000..618d2b7 --- /dev/null +++ b/assets/migrations/000007_create_bm_item_keywords_table.up.sql @@ -0,0 +1,4 @@ +CREATE TABLE bm_item_keywords ( + item_id INTEGER, + keyword TEXT +); \ No newline at end of file diff --git a/assets/migrations/000008_create_bm_item_relations_table.down.sql b/assets/migrations/000008_create_bm_item_relations_table.down.sql new file mode 100644 index 0000000..6417452 --- /dev/null +++ b/assets/migrations/000008_create_bm_item_relations_table.down.sql @@ -0,0 +1 @@ +DROP TABLE bm_item_relations; \ No newline at end of file diff --git a/assets/migrations/000008_create_bm_item_relations_table.up.sql b/assets/migrations/000008_create_bm_item_relations_table.up.sql new file mode 100644 index 0000000..31faf83 --- /dev/null +++ b/assets/migrations/000008_create_bm_item_relations_table.up.sql @@ -0,0 +1,8 @@ +CREATE TABLE "bm_item_relations" ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "item_id" INTEGER NOT NULL, + "related_item_id" INTEGER NOT NULL, + "active" INTEGER NOT NULL DEFAULT 1, + "relation_type" TEXT DEFAULT '', + UNIQUE("item_id","related_item_id") +); \ No newline at end of file diff --git a/assets/migrations/000009_create_bm_item_notebook_table.down.sql b/assets/migrations/000009_create_bm_item_notebook_table.down.sql new file mode 100644 index 0000000..436abcd --- /dev/null +++ b/assets/migrations/000009_create_bm_item_notebook_table.down.sql @@ -0,0 +1 @@ +DROP TABLE bm_notebook; \ No newline at end of file diff --git a/assets/migrations/000009_create_bm_item_notebook_table.up.sql b/assets/migrations/000009_create_bm_item_notebook_table.up.sql new file mode 100644 index 0000000..d0924bd --- /dev/null +++ b/assets/migrations/000009_create_bm_item_notebook_table.up.sql @@ -0,0 +1,7 @@ +CREATE TABLE "bm_notebook" ( + id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, + "title" TEXT DEFAULT '', + "hidden" INTEGER DEFAULT 0, + "icon" TEXT DEFAULT '', + "description" TEXT DEFAULT '' +); \ No newline at end of file diff --git a/assets/migrations/000010_create_bm_quicknote_table.down.sql b/assets/migrations/000010_create_bm_quicknote_table.down.sql new file mode 100644 index 0000000..f7ae96b --- /dev/null +++ b/assets/migrations/000010_create_bm_quicknote_table.down.sql @@ -0,0 +1 @@ +DROP TABLE bm_quicknote; \ No newline at end of file diff --git a/assets/migrations/000010_create_bm_quicknote_table.up.sql b/assets/migrations/000010_create_bm_quicknote_table.up.sql new file mode 100644 index 0000000..33df959 --- /dev/null +++ b/assets/migrations/000010_create_bm_quicknote_table.up.sql @@ -0,0 +1,6 @@ +CREATE TABLE "bm_quicknote" ( + "id" INTEGER, + "note" TEXT DEFAULT '', + "note_rendered" TEXT DEFAULT '', + PRIMARY KEY("id" AUTOINCREMENT) +); \ No newline at end of file diff --git a/assets/migrations/000011_create_bm_type_table.down.sql b/assets/migrations/000011_create_bm_type_table.down.sql new file mode 100644 index 0000000..964e114 --- /dev/null +++ b/assets/migrations/000011_create_bm_type_table.down.sql @@ -0,0 +1 @@ +DROP TABLE bm_type; \ No newline at end of file diff --git a/assets/migrations/000011_create_bm_type_table.up.sql b/assets/migrations/000011_create_bm_type_table.up.sql new file mode 100644 index 0000000..cbc3a13 --- /dev/null +++ b/assets/migrations/000011_create_bm_type_table.up.sql @@ -0,0 +1,11 @@ +CREATE TABLE "bm_type" ( + "id" INTEGER, + "title" TEXT, + "icon" NUMERIC, + "description" BLOB DEFAULT '', + "notebooks" BLOB DEFAULT '', + "show_summary" INTEGER DEFAULT '', + "show_description" INTEGER DEFAULT '', + "sections" TEXT, + PRIMARY KEY("id" AUTOINCREMENT) +); \ No newline at end of file diff --git a/assets/migrations/000012_create_bm_type_fields_table.down.sql b/assets/migrations/000012_create_bm_type_fields_table.down.sql new file mode 100644 index 0000000..964e114 --- /dev/null +++ b/assets/migrations/000012_create_bm_type_fields_table.down.sql @@ -0,0 +1 @@ +DROP TABLE bm_type; \ No newline at end of file diff --git a/assets/migrations/000012_create_bm_type_fields_table.up.sql b/assets/migrations/000012_create_bm_type_fields_table.up.sql new file mode 100644 index 0000000..e65adfb --- /dev/null +++ b/assets/migrations/000012_create_bm_type_fields_table.up.sql @@ -0,0 +1,13 @@ +CREATE TABLE "bm_type_fields" ( + "id" INTEGER, + "widget_id" INTEGER DEFAULT 0, + "type_id" INTEGER DEFAULT 0, + "title" TEXT DEFAULT '', + "position" INTEGER DEFAULT 0, + "valid_values" TEXT DEFAULT '', + "show_on_list" INTEGER DEFAULT 0, + "show_on_view" INTEGER DEFAULT 0, + "ui_section" TEXT DEFAULT '', + "is_multiple" INTEGER DEFAULT 0, + PRIMARY KEY("id" AUTOINCREMENT) +); \ No newline at end of file diff --git a/assets/migrations/000013_create_bm_widgets_table.down.sql b/assets/migrations/000013_create_bm_widgets_table.down.sql new file mode 100644 index 0000000..964e114 --- /dev/null +++ b/assets/migrations/000013_create_bm_widgets_table.down.sql @@ -0,0 +1 @@ +DROP TABLE bm_type; \ No newline at end of file diff --git a/assets/migrations/000013_create_bm_widgets_table.up.sql b/assets/migrations/000013_create_bm_widgets_table.up.sql new file mode 100644 index 0000000..9405d21 --- /dev/null +++ b/assets/migrations/000013_create_bm_widgets_table.up.sql @@ -0,0 +1,6 @@ +CREATE TABLE "bm_widgets" ( + "id" INTEGER, + "name" TEXT NOT NULL DEFAULT '', + "widget" TEXT, + PRIMARY KEY("id" AUTOINCREMENT) +); \ No newline at end of file diff --git a/assets/migrations/000014_create_bm_item_shares_table.down.sql b/assets/migrations/000014_create_bm_item_shares_table.down.sql new file mode 100644 index 0000000..f7756fb --- /dev/null +++ b/assets/migrations/000014_create_bm_item_shares_table.down.sql @@ -0,0 +1 @@ +DROP TABLE bm_item_shares; \ No newline at end of file diff --git a/assets/migrations/000014_create_bm_item_shares_table.up.sql b/assets/migrations/000014_create_bm_item_shares_table.up.sql new file mode 100644 index 0000000..115238c --- /dev/null +++ b/assets/migrations/000014_create_bm_item_shares_table.up.sql @@ -0,0 +1,10 @@ +CREATE TABLE "bm_item_shares" ( + "id" INTEGER, + "token" TEXT NOT NULL UNIQUE, + "item_id" INTEGER DEFAULT 0, + "read" INTEGER DEFAULT 0, + "update" INTEGER DEFAULT 0, + "start_datetime" TEXT DEFAULT 0, + "end_datetime" TEXT DEFAULT 0, + PRIMARY KEY("id" AUTOINCREMENT) +); \ No newline at end of file diff --git a/assets/static/bootstrap-icons/0-circle-fill.svg b/assets/static/bootstrap-icons/0-circle-fill.svg new file mode 100644 index 0000000..2f5f026 --- /dev/null +++ b/assets/static/bootstrap-icons/0-circle-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/0-circle.svg b/assets/static/bootstrap-icons/0-circle.svg new file mode 100644 index 0000000..5e84c8c --- /dev/null +++ b/assets/static/bootstrap-icons/0-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/0-square-fill.svg b/assets/static/bootstrap-icons/0-square-fill.svg new file mode 100644 index 0000000..cca049b --- /dev/null +++ b/assets/static/bootstrap-icons/0-square-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/0-square.svg b/assets/static/bootstrap-icons/0-square.svg new file mode 100644 index 0000000..73b7bc1 --- /dev/null +++ b/assets/static/bootstrap-icons/0-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/1-circle-fill.svg b/assets/static/bootstrap-icons/1-circle-fill.svg new file mode 100644 index 0000000..b10d0f3 --- /dev/null +++ b/assets/static/bootstrap-icons/1-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/1-circle.svg b/assets/static/bootstrap-icons/1-circle.svg new file mode 100644 index 0000000..2aa21f9 --- /dev/null +++ b/assets/static/bootstrap-icons/1-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/1-square-fill.svg b/assets/static/bootstrap-icons/1-square-fill.svg new file mode 100644 index 0000000..2ce792f --- /dev/null +++ b/assets/static/bootstrap-icons/1-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/1-square.svg b/assets/static/bootstrap-icons/1-square.svg new file mode 100644 index 0000000..773534a --- /dev/null +++ b/assets/static/bootstrap-icons/1-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/123.svg b/assets/static/bootstrap-icons/123.svg new file mode 100644 index 0000000..277d405 --- /dev/null +++ b/assets/static/bootstrap-icons/123.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/2-circle-fill.svg b/assets/static/bootstrap-icons/2-circle-fill.svg new file mode 100644 index 0000000..169df3a --- /dev/null +++ b/assets/static/bootstrap-icons/2-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/2-circle.svg b/assets/static/bootstrap-icons/2-circle.svg new file mode 100644 index 0000000..00260b6 --- /dev/null +++ b/assets/static/bootstrap-icons/2-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/2-square-fill.svg b/assets/static/bootstrap-icons/2-square-fill.svg new file mode 100644 index 0000000..2760ca7 --- /dev/null +++ b/assets/static/bootstrap-icons/2-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/2-square.svg b/assets/static/bootstrap-icons/2-square.svg new file mode 100644 index 0000000..4a79ed6 --- /dev/null +++ b/assets/static/bootstrap-icons/2-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/3-circle-fill.svg b/assets/static/bootstrap-icons/3-circle-fill.svg new file mode 100644 index 0000000..9aedc47 --- /dev/null +++ b/assets/static/bootstrap-icons/3-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/3-circle.svg b/assets/static/bootstrap-icons/3-circle.svg new file mode 100644 index 0000000..c2fc517 --- /dev/null +++ b/assets/static/bootstrap-icons/3-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/3-square-fill.svg b/assets/static/bootstrap-icons/3-square-fill.svg new file mode 100644 index 0000000..20c71a7 --- /dev/null +++ b/assets/static/bootstrap-icons/3-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/3-square.svg b/assets/static/bootstrap-icons/3-square.svg new file mode 100644 index 0000000..f0907cc --- /dev/null +++ b/assets/static/bootstrap-icons/3-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/4-circle-fill.svg b/assets/static/bootstrap-icons/4-circle-fill.svg new file mode 100644 index 0000000..51dc8a5 --- /dev/null +++ b/assets/static/bootstrap-icons/4-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/4-circle.svg b/assets/static/bootstrap-icons/4-circle.svg new file mode 100644 index 0000000..e25df51 --- /dev/null +++ b/assets/static/bootstrap-icons/4-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/4-square-fill.svg b/assets/static/bootstrap-icons/4-square-fill.svg new file mode 100644 index 0000000..ce3aa94 --- /dev/null +++ b/assets/static/bootstrap-icons/4-square-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/4-square.svg b/assets/static/bootstrap-icons/4-square.svg new file mode 100644 index 0000000..769102d --- /dev/null +++ b/assets/static/bootstrap-icons/4-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/5-circle-fill.svg b/assets/static/bootstrap-icons/5-circle-fill.svg new file mode 100644 index 0000000..915462d --- /dev/null +++ b/assets/static/bootstrap-icons/5-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/5-circle.svg b/assets/static/bootstrap-icons/5-circle.svg new file mode 100644 index 0000000..5ef620d --- /dev/null +++ b/assets/static/bootstrap-icons/5-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/5-square-fill.svg b/assets/static/bootstrap-icons/5-square-fill.svg new file mode 100644 index 0000000..2b066bb --- /dev/null +++ b/assets/static/bootstrap-icons/5-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/5-square.svg b/assets/static/bootstrap-icons/5-square.svg new file mode 100644 index 0000000..ad3e281 --- /dev/null +++ b/assets/static/bootstrap-icons/5-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/6-circle-fill.svg b/assets/static/bootstrap-icons/6-circle-fill.svg new file mode 100644 index 0000000..21b601a --- /dev/null +++ b/assets/static/bootstrap-icons/6-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/6-circle.svg b/assets/static/bootstrap-icons/6-circle.svg new file mode 100644 index 0000000..fc036b0 --- /dev/null +++ b/assets/static/bootstrap-icons/6-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/6-square-fill.svg b/assets/static/bootstrap-icons/6-square-fill.svg new file mode 100644 index 0000000..908706d --- /dev/null +++ b/assets/static/bootstrap-icons/6-square-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/6-square.svg b/assets/static/bootstrap-icons/6-square.svg new file mode 100644 index 0000000..ce28209 --- /dev/null +++ b/assets/static/bootstrap-icons/6-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/7-circle-fill.svg b/assets/static/bootstrap-icons/7-circle-fill.svg new file mode 100644 index 0000000..0f4f6d9 --- /dev/null +++ b/assets/static/bootstrap-icons/7-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/7-circle.svg b/assets/static/bootstrap-icons/7-circle.svg new file mode 100644 index 0000000..796f45c --- /dev/null +++ b/assets/static/bootstrap-icons/7-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/7-square-fill.svg b/assets/static/bootstrap-icons/7-square-fill.svg new file mode 100644 index 0000000..604186d --- /dev/null +++ b/assets/static/bootstrap-icons/7-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/7-square.svg b/assets/static/bootstrap-icons/7-square.svg new file mode 100644 index 0000000..f269032 --- /dev/null +++ b/assets/static/bootstrap-icons/7-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/8-circle-fill.svg b/assets/static/bootstrap-icons/8-circle-fill.svg new file mode 100644 index 0000000..579846b --- /dev/null +++ b/assets/static/bootstrap-icons/8-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/8-circle.svg b/assets/static/bootstrap-icons/8-circle.svg new file mode 100644 index 0000000..2dbb93e --- /dev/null +++ b/assets/static/bootstrap-icons/8-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/8-square-fill.svg b/assets/static/bootstrap-icons/8-square-fill.svg new file mode 100644 index 0000000..f8efe93 --- /dev/null +++ b/assets/static/bootstrap-icons/8-square-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/8-square.svg b/assets/static/bootstrap-icons/8-square.svg new file mode 100644 index 0000000..f29d225 --- /dev/null +++ b/assets/static/bootstrap-icons/8-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/9-circle-fill.svg b/assets/static/bootstrap-icons/9-circle-fill.svg new file mode 100644 index 0000000..b19b3f5 --- /dev/null +++ b/assets/static/bootstrap-icons/9-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/9-circle.svg b/assets/static/bootstrap-icons/9-circle.svg new file mode 100644 index 0000000..ff91949 --- /dev/null +++ b/assets/static/bootstrap-icons/9-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/9-square-fill.svg b/assets/static/bootstrap-icons/9-square-fill.svg new file mode 100644 index 0000000..e2ca2c3 --- /dev/null +++ b/assets/static/bootstrap-icons/9-square-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/9-square.svg b/assets/static/bootstrap-icons/9-square.svg new file mode 100644 index 0000000..3410f7b --- /dev/null +++ b/assets/static/bootstrap-icons/9-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/activity.svg b/assets/static/bootstrap-icons/activity.svg new file mode 100644 index 0000000..1ca946e --- /dev/null +++ b/assets/static/bootstrap-icons/activity.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/airplane-engines-fill.svg b/assets/static/bootstrap-icons/airplane-engines-fill.svg new file mode 100644 index 0000000..3d8f185 --- /dev/null +++ b/assets/static/bootstrap-icons/airplane-engines-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/airplane-engines.svg b/assets/static/bootstrap-icons/airplane-engines.svg new file mode 100644 index 0000000..2efc31e --- /dev/null +++ b/assets/static/bootstrap-icons/airplane-engines.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/airplane-fill.svg b/assets/static/bootstrap-icons/airplane-fill.svg new file mode 100644 index 0000000..b1e4fa3 --- /dev/null +++ b/assets/static/bootstrap-icons/airplane-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/airplane.svg b/assets/static/bootstrap-icons/airplane.svg new file mode 100644 index 0000000..5f937e1 --- /dev/null +++ b/assets/static/bootstrap-icons/airplane.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/alarm-fill.svg b/assets/static/bootstrap-icons/alarm-fill.svg new file mode 100644 index 0000000..a53c88f --- /dev/null +++ b/assets/static/bootstrap-icons/alarm-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/alarm.svg b/assets/static/bootstrap-icons/alarm.svg new file mode 100644 index 0000000..27160b3 --- /dev/null +++ b/assets/static/bootstrap-icons/alarm.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/alexa.svg b/assets/static/bootstrap-icons/alexa.svg new file mode 100644 index 0000000..0827c41 --- /dev/null +++ b/assets/static/bootstrap-icons/alexa.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/align-bottom.svg b/assets/static/bootstrap-icons/align-bottom.svg new file mode 100644 index 0000000..5c2569f --- /dev/null +++ b/assets/static/bootstrap-icons/align-bottom.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/align-center.svg b/assets/static/bootstrap-icons/align-center.svg new file mode 100644 index 0000000..ea4290b --- /dev/null +++ b/assets/static/bootstrap-icons/align-center.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/align-end.svg b/assets/static/bootstrap-icons/align-end.svg new file mode 100644 index 0000000..15429bb --- /dev/null +++ b/assets/static/bootstrap-icons/align-end.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/align-middle.svg b/assets/static/bootstrap-icons/align-middle.svg new file mode 100644 index 0000000..82f6801 --- /dev/null +++ b/assets/static/bootstrap-icons/align-middle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/align-start.svg b/assets/static/bootstrap-icons/align-start.svg new file mode 100644 index 0000000..75dca50 --- /dev/null +++ b/assets/static/bootstrap-icons/align-start.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/align-top.svg b/assets/static/bootstrap-icons/align-top.svg new file mode 100644 index 0000000..f354fc5 --- /dev/null +++ b/assets/static/bootstrap-icons/align-top.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/alipay.svg b/assets/static/bootstrap-icons/alipay.svg new file mode 100644 index 0000000..30b6fe7 --- /dev/null +++ b/assets/static/bootstrap-icons/alipay.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/alphabet-uppercase.svg b/assets/static/bootstrap-icons/alphabet-uppercase.svg new file mode 100644 index 0000000..d0887b5 --- /dev/null +++ b/assets/static/bootstrap-icons/alphabet-uppercase.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/alphabet.svg b/assets/static/bootstrap-icons/alphabet.svg new file mode 100644 index 0000000..5d097d7 --- /dev/null +++ b/assets/static/bootstrap-icons/alphabet.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/alt.svg b/assets/static/bootstrap-icons/alt.svg new file mode 100644 index 0000000..2141bcb --- /dev/null +++ b/assets/static/bootstrap-icons/alt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/amazon.svg b/assets/static/bootstrap-icons/amazon.svg new file mode 100644 index 0000000..0752545 --- /dev/null +++ b/assets/static/bootstrap-icons/amazon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/amd.svg b/assets/static/bootstrap-icons/amd.svg new file mode 100644 index 0000000..ef0757c --- /dev/null +++ b/assets/static/bootstrap-icons/amd.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/android.svg b/assets/static/bootstrap-icons/android.svg new file mode 100644 index 0000000..4c1f097 --- /dev/null +++ b/assets/static/bootstrap-icons/android.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/android2.svg b/assets/static/bootstrap-icons/android2.svg new file mode 100644 index 0000000..f49c14e --- /dev/null +++ b/assets/static/bootstrap-icons/android2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/app-indicator.svg b/assets/static/bootstrap-icons/app-indicator.svg new file mode 100644 index 0000000..b28e219 --- /dev/null +++ b/assets/static/bootstrap-icons/app-indicator.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/app.svg b/assets/static/bootstrap-icons/app.svg new file mode 100644 index 0000000..b361308 --- /dev/null +++ b/assets/static/bootstrap-icons/app.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/apple.svg b/assets/static/bootstrap-icons/apple.svg new file mode 100644 index 0000000..58235c3 --- /dev/null +++ b/assets/static/bootstrap-icons/apple.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/archive-fill.svg b/assets/static/bootstrap-icons/archive-fill.svg new file mode 100644 index 0000000..e5ea32b --- /dev/null +++ b/assets/static/bootstrap-icons/archive-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/archive.svg b/assets/static/bootstrap-icons/archive.svg new file mode 100644 index 0000000..7bc5eb2 --- /dev/null +++ b/assets/static/bootstrap-icons/archive.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-90deg-down.svg b/assets/static/bootstrap-icons/arrow-90deg-down.svg new file mode 100644 index 0000000..7459597 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-90deg-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-90deg-left.svg b/assets/static/bootstrap-icons/arrow-90deg-left.svg new file mode 100644 index 0000000..4e17ab4 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-90deg-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-90deg-right.svg b/assets/static/bootstrap-icons/arrow-90deg-right.svg new file mode 100644 index 0000000..9fb6363 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-90deg-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-90deg-up.svg b/assets/static/bootstrap-icons/arrow-90deg-up.svg new file mode 100644 index 0000000..11be0de --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-90deg-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-bar-down.svg b/assets/static/bootstrap-icons/arrow-bar-down.svg new file mode 100644 index 0000000..1b212d5 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-bar-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-bar-left.svg b/assets/static/bootstrap-icons/arrow-bar-left.svg new file mode 100644 index 0000000..621bf2a --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-bar-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-bar-right.svg b/assets/static/bootstrap-icons/arrow-bar-right.svg new file mode 100644 index 0000000..0210410 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-bar-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-bar-up.svg b/assets/static/bootstrap-icons/arrow-bar-up.svg new file mode 100644 index 0000000..d5510da --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-bar-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-clockwise.svg b/assets/static/bootstrap-icons/arrow-clockwise.svg new file mode 100644 index 0000000..324d5af --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-clockwise.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-counterclockwise.svg b/assets/static/bootstrap-icons/arrow-counterclockwise.svg new file mode 100644 index 0000000..3d9ff62 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-counterclockwise.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-circle-fill.svg b/assets/static/bootstrap-icons/arrow-down-circle-fill.svg new file mode 100644 index 0000000..242eb58 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-circle.svg b/assets/static/bootstrap-icons/arrow-down-circle.svg new file mode 100644 index 0000000..42e96b5 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-left-circle-fill.svg b/assets/static/bootstrap-icons/arrow-down-left-circle-fill.svg new file mode 100644 index 0000000..e7f4735 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-left-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-left-circle.svg b/assets/static/bootstrap-icons/arrow-down-left-circle.svg new file mode 100644 index 0000000..f67491f --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-left-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-left-square-fill.svg b/assets/static/bootstrap-icons/arrow-down-left-square-fill.svg new file mode 100644 index 0000000..6e03bf2 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-left-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-left-square.svg b/assets/static/bootstrap-icons/arrow-down-left-square.svg new file mode 100644 index 0000000..1278d39 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-left-square.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-left.svg b/assets/static/bootstrap-icons/arrow-down-left.svg new file mode 100644 index 0000000..4011c77 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-right-circle-fill.svg b/assets/static/bootstrap-icons/arrow-down-right-circle-fill.svg new file mode 100644 index 0000000..4ff73b6 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-right-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-right-circle.svg b/assets/static/bootstrap-icons/arrow-down-right-circle.svg new file mode 100644 index 0000000..054e83f --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-right-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-right-square-fill.svg b/assets/static/bootstrap-icons/arrow-down-right-square-fill.svg new file mode 100644 index 0000000..a556e06 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-right-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-right-square.svg b/assets/static/bootstrap-icons/arrow-down-right-square.svg new file mode 100644 index 0000000..4bfb679 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-right-square.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-right.svg b/assets/static/bootstrap-icons/arrow-down-right.svg new file mode 100644 index 0000000..08aef16 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-short.svg b/assets/static/bootstrap-icons/arrow-down-short.svg new file mode 100644 index 0000000..66b7fa1 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-short.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-square-fill.svg b/assets/static/bootstrap-icons/arrow-down-square-fill.svg new file mode 100644 index 0000000..c9020dc --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-square.svg b/assets/static/bootstrap-icons/arrow-down-square.svg new file mode 100644 index 0000000..c492b71 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-square.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down-up.svg b/assets/static/bootstrap-icons/arrow-down-up.svg new file mode 100644 index 0000000..04cb3a5 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-down.svg b/assets/static/bootstrap-icons/arrow-down.svg new file mode 100644 index 0000000..f66f74b --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-left-circle-fill.svg b/assets/static/bootstrap-icons/arrow-left-circle-fill.svg new file mode 100644 index 0000000..ae19d97 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-left-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-left-circle.svg b/assets/static/bootstrap-icons/arrow-left-circle.svg new file mode 100644 index 0000000..f3246ea --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-left-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-left-right.svg b/assets/static/bootstrap-icons/arrow-left-right.svg new file mode 100644 index 0000000..89c4003 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-left-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-left-short.svg b/assets/static/bootstrap-icons/arrow-left-short.svg new file mode 100644 index 0000000..abb15dd --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-left-short.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-left-square-fill.svg b/assets/static/bootstrap-icons/arrow-left-square-fill.svg new file mode 100644 index 0000000..3ee717e --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-left-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-left-square.svg b/assets/static/bootstrap-icons/arrow-left-square.svg new file mode 100644 index 0000000..8f09a48 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-left-square.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-left.svg b/assets/static/bootstrap-icons/arrow-left.svg new file mode 100644 index 0000000..587d4fe --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-repeat.svg b/assets/static/bootstrap-icons/arrow-repeat.svg new file mode 100644 index 0000000..b17dba4 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-repeat.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-return-left.svg b/assets/static/bootstrap-icons/arrow-return-left.svg new file mode 100644 index 0000000..3c13fc4 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-return-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-return-right.svg b/assets/static/bootstrap-icons/arrow-return-right.svg new file mode 100644 index 0000000..60d282c --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-return-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-right-circle-fill.svg b/assets/static/bootstrap-icons/arrow-right-circle-fill.svg new file mode 100644 index 0000000..32c21ea --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-right-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-right-circle.svg b/assets/static/bootstrap-icons/arrow-right-circle.svg new file mode 100644 index 0000000..ad7293e --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-right-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-right-short.svg b/assets/static/bootstrap-icons/arrow-right-short.svg new file mode 100644 index 0000000..fa238ff --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-right-short.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-right-square-fill.svg b/assets/static/bootstrap-icons/arrow-right-square-fill.svg new file mode 100644 index 0000000..c7c8eec --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-right-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-right-square.svg b/assets/static/bootstrap-icons/arrow-right-square.svg new file mode 100644 index 0000000..7a4b78b --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-right-square.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-right.svg b/assets/static/bootstrap-icons/arrow-right.svg new file mode 100644 index 0000000..2362904 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-through-heart-fill.svg b/assets/static/bootstrap-icons/arrow-through-heart-fill.svg new file mode 100644 index 0000000..e98bce1 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-through-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-through-heart.svg b/assets/static/bootstrap-icons/arrow-through-heart.svg new file mode 100644 index 0000000..daf397b --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-through-heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-circle-fill.svg b/assets/static/bootstrap-icons/arrow-up-circle-fill.svg new file mode 100644 index 0000000..9e7ef36 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-circle.svg b/assets/static/bootstrap-icons/arrow-up-circle.svg new file mode 100644 index 0000000..e18a689 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-left-circle-fill.svg b/assets/static/bootstrap-icons/arrow-up-left-circle-fill.svg new file mode 100644 index 0000000..e1e2e97 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-left-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-left-circle.svg b/assets/static/bootstrap-icons/arrow-up-left-circle.svg new file mode 100644 index 0000000..3101b65 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-left-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-left-square-fill.svg b/assets/static/bootstrap-icons/arrow-up-left-square-fill.svg new file mode 100644 index 0000000..e699865 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-left-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-left-square.svg b/assets/static/bootstrap-icons/arrow-up-left-square.svg new file mode 100644 index 0000000..4f31190 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-left-square.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-left.svg b/assets/static/bootstrap-icons/arrow-up-left.svg new file mode 100644 index 0000000..938d0d0 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-right-circle-fill.svg b/assets/static/bootstrap-icons/arrow-up-right-circle-fill.svg new file mode 100644 index 0000000..0eb9b54 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-right-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-right-circle.svg b/assets/static/bootstrap-icons/arrow-up-right-circle.svg new file mode 100644 index 0000000..ed6ae41 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-right-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-right-square-fill.svg b/assets/static/bootstrap-icons/arrow-up-right-square-fill.svg new file mode 100644 index 0000000..c2246ec --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-right-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-right-square.svg b/assets/static/bootstrap-icons/arrow-up-right-square.svg new file mode 100644 index 0000000..b14940f --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-right-square.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-right.svg b/assets/static/bootstrap-icons/arrow-up-right.svg new file mode 100644 index 0000000..7b3794b --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-short.svg b/assets/static/bootstrap-icons/arrow-up-short.svg new file mode 100644 index 0000000..543089a --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-short.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-square-fill.svg b/assets/static/bootstrap-icons/arrow-up-square-fill.svg new file mode 100644 index 0000000..9d7f65f --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up-square.svg b/assets/static/bootstrap-icons/arrow-up-square.svg new file mode 100644 index 0000000..bec15c4 --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up-square.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrow-up.svg b/assets/static/bootstrap-icons/arrow-up.svg new file mode 100644 index 0000000..951521a --- /dev/null +++ b/assets/static/bootstrap-icons/arrow-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrows-angle-contract.svg b/assets/static/bootstrap-icons/arrows-angle-contract.svg new file mode 100644 index 0000000..1aa7875 --- /dev/null +++ b/assets/static/bootstrap-icons/arrows-angle-contract.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrows-angle-expand.svg b/assets/static/bootstrap-icons/arrows-angle-expand.svg new file mode 100644 index 0000000..578d3b6 --- /dev/null +++ b/assets/static/bootstrap-icons/arrows-angle-expand.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrows-collapse-vertical.svg b/assets/static/bootstrap-icons/arrows-collapse-vertical.svg new file mode 100644 index 0000000..0fc4477 --- /dev/null +++ b/assets/static/bootstrap-icons/arrows-collapse-vertical.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrows-collapse.svg b/assets/static/bootstrap-icons/arrows-collapse.svg new file mode 100644 index 0000000..ca055c3 --- /dev/null +++ b/assets/static/bootstrap-icons/arrows-collapse.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrows-expand-vertical.svg b/assets/static/bootstrap-icons/arrows-expand-vertical.svg new file mode 100644 index 0000000..9dbfac4 --- /dev/null +++ b/assets/static/bootstrap-icons/arrows-expand-vertical.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrows-expand.svg b/assets/static/bootstrap-icons/arrows-expand.svg new file mode 100644 index 0000000..99eb276 --- /dev/null +++ b/assets/static/bootstrap-icons/arrows-expand.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrows-fullscreen.svg b/assets/static/bootstrap-icons/arrows-fullscreen.svg new file mode 100644 index 0000000..7633e3f --- /dev/null +++ b/assets/static/bootstrap-icons/arrows-fullscreen.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrows-move.svg b/assets/static/bootstrap-icons/arrows-move.svg new file mode 100644 index 0000000..ef2b885 --- /dev/null +++ b/assets/static/bootstrap-icons/arrows-move.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrows-vertical.svg b/assets/static/bootstrap-icons/arrows-vertical.svg new file mode 100644 index 0000000..22f60fd --- /dev/null +++ b/assets/static/bootstrap-icons/arrows-vertical.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/arrows.svg b/assets/static/bootstrap-icons/arrows.svg new file mode 100644 index 0000000..a6bd3d7 --- /dev/null +++ b/assets/static/bootstrap-icons/arrows.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/aspect-ratio-fill.svg b/assets/static/bootstrap-icons/aspect-ratio-fill.svg new file mode 100644 index 0000000..6d6cb8d --- /dev/null +++ b/assets/static/bootstrap-icons/aspect-ratio-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/aspect-ratio.svg b/assets/static/bootstrap-icons/aspect-ratio.svg new file mode 100644 index 0000000..ee634b0 --- /dev/null +++ b/assets/static/bootstrap-icons/aspect-ratio.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/asterisk.svg b/assets/static/bootstrap-icons/asterisk.svg new file mode 100644 index 0000000..fbc13b7 --- /dev/null +++ b/assets/static/bootstrap-icons/asterisk.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/at.svg b/assets/static/bootstrap-icons/at.svg new file mode 100644 index 0000000..3cab29e --- /dev/null +++ b/assets/static/bootstrap-icons/at.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/award-fill.svg b/assets/static/bootstrap-icons/award-fill.svg new file mode 100644 index 0000000..f996790 --- /dev/null +++ b/assets/static/bootstrap-icons/award-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/award.svg b/assets/static/bootstrap-icons/award.svg new file mode 100644 index 0000000..67c760b --- /dev/null +++ b/assets/static/bootstrap-icons/award.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/back.svg b/assets/static/bootstrap-icons/back.svg new file mode 100644 index 0000000..9f55340 --- /dev/null +++ b/assets/static/bootstrap-icons/back.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/backpack-fill.svg b/assets/static/bootstrap-icons/backpack-fill.svg new file mode 100644 index 0000000..ec737a9 --- /dev/null +++ b/assets/static/bootstrap-icons/backpack-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/backpack.svg b/assets/static/bootstrap-icons/backpack.svg new file mode 100644 index 0000000..819aa29 --- /dev/null +++ b/assets/static/bootstrap-icons/backpack.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/backpack2-fill.svg b/assets/static/bootstrap-icons/backpack2-fill.svg new file mode 100644 index 0000000..3c9b4da --- /dev/null +++ b/assets/static/bootstrap-icons/backpack2-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/backpack2.svg b/assets/static/bootstrap-icons/backpack2.svg new file mode 100644 index 0000000..e0e4fe5 --- /dev/null +++ b/assets/static/bootstrap-icons/backpack2.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/backpack3-fill.svg b/assets/static/bootstrap-icons/backpack3-fill.svg new file mode 100644 index 0000000..4583c4f --- /dev/null +++ b/assets/static/bootstrap-icons/backpack3-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/backpack3.svg b/assets/static/bootstrap-icons/backpack3.svg new file mode 100644 index 0000000..819f8df --- /dev/null +++ b/assets/static/bootstrap-icons/backpack3.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/backpack4-fill.svg b/assets/static/bootstrap-icons/backpack4-fill.svg new file mode 100644 index 0000000..a3bba3a --- /dev/null +++ b/assets/static/bootstrap-icons/backpack4-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/backpack4.svg b/assets/static/bootstrap-icons/backpack4.svg new file mode 100644 index 0000000..140a12d --- /dev/null +++ b/assets/static/bootstrap-icons/backpack4.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/backspace-fill.svg b/assets/static/bootstrap-icons/backspace-fill.svg new file mode 100644 index 0000000..0787578 --- /dev/null +++ b/assets/static/bootstrap-icons/backspace-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/backspace-reverse-fill.svg b/assets/static/bootstrap-icons/backspace-reverse-fill.svg new file mode 100644 index 0000000..41c8dbb --- /dev/null +++ b/assets/static/bootstrap-icons/backspace-reverse-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/backspace-reverse.svg b/assets/static/bootstrap-icons/backspace-reverse.svg new file mode 100644 index 0000000..7b3fafd --- /dev/null +++ b/assets/static/bootstrap-icons/backspace-reverse.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/backspace.svg b/assets/static/bootstrap-icons/backspace.svg new file mode 100644 index 0000000..39b688f --- /dev/null +++ b/assets/static/bootstrap-icons/backspace.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-3d-fill.svg b/assets/static/bootstrap-icons/badge-3d-fill.svg new file mode 100644 index 0000000..750598c --- /dev/null +++ b/assets/static/bootstrap-icons/badge-3d-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-3d.svg b/assets/static/bootstrap-icons/badge-3d.svg new file mode 100644 index 0000000..b3153f2 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-3d.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-4k-fill.svg b/assets/static/bootstrap-icons/badge-4k-fill.svg new file mode 100644 index 0000000..72f34b9 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-4k-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-4k.svg b/assets/static/bootstrap-icons/badge-4k.svg new file mode 100644 index 0000000..3dfc9b1 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-4k.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-8k-fill.svg b/assets/static/bootstrap-icons/badge-8k-fill.svg new file mode 100644 index 0000000..4bd9b80 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-8k-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-8k.svg b/assets/static/bootstrap-icons/badge-8k.svg new file mode 100644 index 0000000..d11f82d --- /dev/null +++ b/assets/static/bootstrap-icons/badge-8k.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-ad-fill.svg b/assets/static/bootstrap-icons/badge-ad-fill.svg new file mode 100644 index 0000000..023f210 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-ad-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-ad.svg b/assets/static/bootstrap-icons/badge-ad.svg new file mode 100644 index 0000000..616ad74 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-ad.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-ar-fill.svg b/assets/static/bootstrap-icons/badge-ar-fill.svg new file mode 100644 index 0000000..48aee0f --- /dev/null +++ b/assets/static/bootstrap-icons/badge-ar-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-ar.svg b/assets/static/bootstrap-icons/badge-ar.svg new file mode 100644 index 0000000..0fc1975 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-ar.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-cc-fill.svg b/assets/static/bootstrap-icons/badge-cc-fill.svg new file mode 100644 index 0000000..0f3d1f9 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-cc-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-cc.svg b/assets/static/bootstrap-icons/badge-cc.svg new file mode 100644 index 0000000..d5f42e1 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-cc.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-hd-fill.svg b/assets/static/bootstrap-icons/badge-hd-fill.svg new file mode 100644 index 0000000..96f0875 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-hd-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-hd.svg b/assets/static/bootstrap-icons/badge-hd.svg new file mode 100644 index 0000000..5689042 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-hd.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-sd-fill.svg b/assets/static/bootstrap-icons/badge-sd-fill.svg new file mode 100644 index 0000000..a37154a --- /dev/null +++ b/assets/static/bootstrap-icons/badge-sd-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-sd.svg b/assets/static/bootstrap-icons/badge-sd.svg new file mode 100644 index 0000000..df8d029 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-sd.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-tm-fill.svg b/assets/static/bootstrap-icons/badge-tm-fill.svg new file mode 100644 index 0000000..632b569 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-tm-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-tm.svg b/assets/static/bootstrap-icons/badge-tm.svg new file mode 100644 index 0000000..33de5c2 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-tm.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-vo-fill.svg b/assets/static/bootstrap-icons/badge-vo-fill.svg new file mode 100644 index 0000000..1d27b07 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-vo-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-vo.svg b/assets/static/bootstrap-icons/badge-vo.svg new file mode 100644 index 0000000..f5e2ece --- /dev/null +++ b/assets/static/bootstrap-icons/badge-vo.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-vr-fill.svg b/assets/static/bootstrap-icons/badge-vr-fill.svg new file mode 100644 index 0000000..e614af6 --- /dev/null +++ b/assets/static/bootstrap-icons/badge-vr-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-vr.svg b/assets/static/bootstrap-icons/badge-vr.svg new file mode 100644 index 0000000..c1c73dc --- /dev/null +++ b/assets/static/bootstrap-icons/badge-vr.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-wc-fill.svg b/assets/static/bootstrap-icons/badge-wc-fill.svg new file mode 100644 index 0000000..d16436a --- /dev/null +++ b/assets/static/bootstrap-icons/badge-wc-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/badge-wc.svg b/assets/static/bootstrap-icons/badge-wc.svg new file mode 100644 index 0000000..ea459ba --- /dev/null +++ b/assets/static/bootstrap-icons/badge-wc.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bag-check-fill.svg b/assets/static/bootstrap-icons/bag-check-fill.svg new file mode 100644 index 0000000..9976d5c --- /dev/null +++ b/assets/static/bootstrap-icons/bag-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bag-check.svg b/assets/static/bootstrap-icons/bag-check.svg new file mode 100644 index 0000000..a4e3278 --- /dev/null +++ b/assets/static/bootstrap-icons/bag-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bag-dash-fill.svg b/assets/static/bootstrap-icons/bag-dash-fill.svg new file mode 100644 index 0000000..ccb5589 --- /dev/null +++ b/assets/static/bootstrap-icons/bag-dash-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bag-dash.svg b/assets/static/bootstrap-icons/bag-dash.svg new file mode 100644 index 0000000..0997f33 --- /dev/null +++ b/assets/static/bootstrap-icons/bag-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bag-fill.svg b/assets/static/bootstrap-icons/bag-fill.svg new file mode 100644 index 0000000..812fcfc --- /dev/null +++ b/assets/static/bootstrap-icons/bag-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bag-heart-fill.svg b/assets/static/bootstrap-icons/bag-heart-fill.svg new file mode 100644 index 0000000..4938b83 --- /dev/null +++ b/assets/static/bootstrap-icons/bag-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bag-heart.svg b/assets/static/bootstrap-icons/bag-heart.svg new file mode 100644 index 0000000..e7b906a --- /dev/null +++ b/assets/static/bootstrap-icons/bag-heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bag-plus-fill.svg b/assets/static/bootstrap-icons/bag-plus-fill.svg new file mode 100644 index 0000000..b98f6b2 --- /dev/null +++ b/assets/static/bootstrap-icons/bag-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bag-plus.svg b/assets/static/bootstrap-icons/bag-plus.svg new file mode 100644 index 0000000..0d7ddc6 --- /dev/null +++ b/assets/static/bootstrap-icons/bag-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bag-x-fill.svg b/assets/static/bootstrap-icons/bag-x-fill.svg new file mode 100644 index 0000000..cbe77df --- /dev/null +++ b/assets/static/bootstrap-icons/bag-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bag-x.svg b/assets/static/bootstrap-icons/bag-x.svg new file mode 100644 index 0000000..4f38008 --- /dev/null +++ b/assets/static/bootstrap-icons/bag-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bag.svg b/assets/static/bootstrap-icons/bag.svg new file mode 100644 index 0000000..acd0287 --- /dev/null +++ b/assets/static/bootstrap-icons/bag.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/balloon-fill.svg b/assets/static/bootstrap-icons/balloon-fill.svg new file mode 100644 index 0000000..2d57e2d --- /dev/null +++ b/assets/static/bootstrap-icons/balloon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/balloon-heart-fill.svg b/assets/static/bootstrap-icons/balloon-heart-fill.svg new file mode 100644 index 0000000..ab17865 --- /dev/null +++ b/assets/static/bootstrap-icons/balloon-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/balloon-heart.svg b/assets/static/bootstrap-icons/balloon-heart.svg new file mode 100644 index 0000000..0e056cb --- /dev/null +++ b/assets/static/bootstrap-icons/balloon-heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/balloon.svg b/assets/static/bootstrap-icons/balloon.svg new file mode 100644 index 0000000..6906cb3 --- /dev/null +++ b/assets/static/bootstrap-icons/balloon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ban-fill.svg b/assets/static/bootstrap-icons/ban-fill.svg new file mode 100644 index 0000000..0bb7df0 --- /dev/null +++ b/assets/static/bootstrap-icons/ban-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ban.svg b/assets/static/bootstrap-icons/ban.svg new file mode 100644 index 0000000..5acfd41 --- /dev/null +++ b/assets/static/bootstrap-icons/ban.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bandaid-fill.svg b/assets/static/bootstrap-icons/bandaid-fill.svg new file mode 100644 index 0000000..052ad73 --- /dev/null +++ b/assets/static/bootstrap-icons/bandaid-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bandaid.svg b/assets/static/bootstrap-icons/bandaid.svg new file mode 100644 index 0000000..e09850e --- /dev/null +++ b/assets/static/bootstrap-icons/bandaid.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bank.svg b/assets/static/bootstrap-icons/bank.svg new file mode 100644 index 0000000..2e7f4f0 --- /dev/null +++ b/assets/static/bootstrap-icons/bank.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bank2.svg b/assets/static/bootstrap-icons/bank2.svg new file mode 100644 index 0000000..acc8ef9 --- /dev/null +++ b/assets/static/bootstrap-icons/bank2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bar-chart-fill.svg b/assets/static/bootstrap-icons/bar-chart-fill.svg new file mode 100644 index 0000000..7e4ebee --- /dev/null +++ b/assets/static/bootstrap-icons/bar-chart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bar-chart-line-fill.svg b/assets/static/bootstrap-icons/bar-chart-line-fill.svg new file mode 100644 index 0000000..6808e6f --- /dev/null +++ b/assets/static/bootstrap-icons/bar-chart-line-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bar-chart-line.svg b/assets/static/bootstrap-icons/bar-chart-line.svg new file mode 100644 index 0000000..567a808 --- /dev/null +++ b/assets/static/bootstrap-icons/bar-chart-line.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bar-chart-steps.svg b/assets/static/bootstrap-icons/bar-chart-steps.svg new file mode 100644 index 0000000..346e97b --- /dev/null +++ b/assets/static/bootstrap-icons/bar-chart-steps.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bar-chart.svg b/assets/static/bootstrap-icons/bar-chart.svg new file mode 100644 index 0000000..8e57c80 --- /dev/null +++ b/assets/static/bootstrap-icons/bar-chart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/basket-fill.svg b/assets/static/bootstrap-icons/basket-fill.svg new file mode 100644 index 0000000..b2e01f5 --- /dev/null +++ b/assets/static/bootstrap-icons/basket-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/basket.svg b/assets/static/bootstrap-icons/basket.svg new file mode 100644 index 0000000..418a5f9 --- /dev/null +++ b/assets/static/bootstrap-icons/basket.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/basket2-fill.svg b/assets/static/bootstrap-icons/basket2-fill.svg new file mode 100644 index 0000000..03c7079 --- /dev/null +++ b/assets/static/bootstrap-icons/basket2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/basket2.svg b/assets/static/bootstrap-icons/basket2.svg new file mode 100644 index 0000000..9b78be2 --- /dev/null +++ b/assets/static/bootstrap-icons/basket2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/basket3-fill.svg b/assets/static/bootstrap-icons/basket3-fill.svg new file mode 100644 index 0000000..e26f0ee --- /dev/null +++ b/assets/static/bootstrap-icons/basket3-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/basket3.svg b/assets/static/bootstrap-icons/basket3.svg new file mode 100644 index 0000000..57fa6a0 --- /dev/null +++ b/assets/static/bootstrap-icons/basket3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/battery-charging.svg b/assets/static/bootstrap-icons/battery-charging.svg new file mode 100644 index 0000000..4ae74d2 --- /dev/null +++ b/assets/static/bootstrap-icons/battery-charging.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/battery-full.svg b/assets/static/bootstrap-icons/battery-full.svg new file mode 100644 index 0000000..bff6a3f --- /dev/null +++ b/assets/static/bootstrap-icons/battery-full.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/battery-half.svg b/assets/static/bootstrap-icons/battery-half.svg new file mode 100644 index 0000000..de57848 --- /dev/null +++ b/assets/static/bootstrap-icons/battery-half.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/battery.svg b/assets/static/bootstrap-icons/battery.svg new file mode 100644 index 0000000..2bacfa8 --- /dev/null +++ b/assets/static/bootstrap-icons/battery.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/behance.svg b/assets/static/bootstrap-icons/behance.svg new file mode 100644 index 0000000..805f142 --- /dev/null +++ b/assets/static/bootstrap-icons/behance.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bell-fill.svg b/assets/static/bootstrap-icons/bell-fill.svg new file mode 100644 index 0000000..a537c3a --- /dev/null +++ b/assets/static/bootstrap-icons/bell-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bell-slash-fill.svg b/assets/static/bootstrap-icons/bell-slash-fill.svg new file mode 100644 index 0000000..534dd13 --- /dev/null +++ b/assets/static/bootstrap-icons/bell-slash-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bell-slash.svg b/assets/static/bootstrap-icons/bell-slash.svg new file mode 100644 index 0000000..7817e2b --- /dev/null +++ b/assets/static/bootstrap-icons/bell-slash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bell.svg b/assets/static/bootstrap-icons/bell.svg new file mode 100644 index 0000000..a71eba3 --- /dev/null +++ b/assets/static/bootstrap-icons/bell.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bezier.svg b/assets/static/bootstrap-icons/bezier.svg new file mode 100644 index 0000000..075b721 --- /dev/null +++ b/assets/static/bootstrap-icons/bezier.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bezier2.svg b/assets/static/bootstrap-icons/bezier2.svg new file mode 100644 index 0000000..8a59238 --- /dev/null +++ b/assets/static/bootstrap-icons/bezier2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bicycle.svg b/assets/static/bootstrap-icons/bicycle.svg new file mode 100644 index 0000000..3956545 --- /dev/null +++ b/assets/static/bootstrap-icons/bicycle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bing.svg b/assets/static/bootstrap-icons/bing.svg new file mode 100644 index 0000000..9368917 --- /dev/null +++ b/assets/static/bootstrap-icons/bing.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/binoculars-fill.svg b/assets/static/bootstrap-icons/binoculars-fill.svg new file mode 100644 index 0000000..d6d6dc0 --- /dev/null +++ b/assets/static/bootstrap-icons/binoculars-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/binoculars.svg b/assets/static/bootstrap-icons/binoculars.svg new file mode 100644 index 0000000..015d622 --- /dev/null +++ b/assets/static/bootstrap-icons/binoculars.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/blockquote-left.svg b/assets/static/bootstrap-icons/blockquote-left.svg new file mode 100644 index 0000000..f8b6b2d --- /dev/null +++ b/assets/static/bootstrap-icons/blockquote-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/blockquote-right.svg b/assets/static/bootstrap-icons/blockquote-right.svg new file mode 100644 index 0000000..afc81c9 --- /dev/null +++ b/assets/static/bootstrap-icons/blockquote-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bluetooth.svg b/assets/static/bootstrap-icons/bluetooth.svg new file mode 100644 index 0000000..8726e22 --- /dev/null +++ b/assets/static/bootstrap-icons/bluetooth.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/body-text.svg b/assets/static/bootstrap-icons/body-text.svg new file mode 100644 index 0000000..fd5e435 --- /dev/null +++ b/assets/static/bootstrap-icons/body-text.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/book-fill.svg b/assets/static/bootstrap-icons/book-fill.svg new file mode 100644 index 0000000..ddb0000 --- /dev/null +++ b/assets/static/bootstrap-icons/book-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/book-half.svg b/assets/static/bootstrap-icons/book-half.svg new file mode 100644 index 0000000..8eabe81 --- /dev/null +++ b/assets/static/bootstrap-icons/book-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/book.svg b/assets/static/bootstrap-icons/book.svg new file mode 100644 index 0000000..302acf0 --- /dev/null +++ b/assets/static/bootstrap-icons/book.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmark-check-fill.svg b/assets/static/bootstrap-icons/bookmark-check-fill.svg new file mode 100644 index 0000000..325fbde --- /dev/null +++ b/assets/static/bootstrap-icons/bookmark-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmark-check.svg b/assets/static/bootstrap-icons/bookmark-check.svg new file mode 100644 index 0000000..f4c9149 --- /dev/null +++ b/assets/static/bootstrap-icons/bookmark-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmark-dash-fill.svg b/assets/static/bootstrap-icons/bookmark-dash-fill.svg new file mode 100644 index 0000000..dbf9cc1 --- /dev/null +++ b/assets/static/bootstrap-icons/bookmark-dash-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmark-dash.svg b/assets/static/bootstrap-icons/bookmark-dash.svg new file mode 100644 index 0000000..115b448 --- /dev/null +++ b/assets/static/bootstrap-icons/bookmark-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmark-fill.svg b/assets/static/bootstrap-icons/bookmark-fill.svg new file mode 100644 index 0000000..3c237a9 --- /dev/null +++ b/assets/static/bootstrap-icons/bookmark-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmark-heart-fill.svg b/assets/static/bootstrap-icons/bookmark-heart-fill.svg new file mode 100644 index 0000000..6647b7c --- /dev/null +++ b/assets/static/bootstrap-icons/bookmark-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmark-heart.svg b/assets/static/bootstrap-icons/bookmark-heart.svg new file mode 100644 index 0000000..c368f5d --- /dev/null +++ b/assets/static/bootstrap-icons/bookmark-heart.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmark-plus-fill.svg b/assets/static/bootstrap-icons/bookmark-plus-fill.svg new file mode 100644 index 0000000..41e0733 --- /dev/null +++ b/assets/static/bootstrap-icons/bookmark-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmark-plus.svg b/assets/static/bootstrap-icons/bookmark-plus.svg new file mode 100644 index 0000000..37b137c --- /dev/null +++ b/assets/static/bootstrap-icons/bookmark-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmark-star-fill.svg b/assets/static/bootstrap-icons/bookmark-star-fill.svg new file mode 100644 index 0000000..89fd335 --- /dev/null +++ b/assets/static/bootstrap-icons/bookmark-star-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmark-star.svg b/assets/static/bootstrap-icons/bookmark-star.svg new file mode 100644 index 0000000..2f792de --- /dev/null +++ b/assets/static/bootstrap-icons/bookmark-star.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmark-x-fill.svg b/assets/static/bootstrap-icons/bookmark-x-fill.svg new file mode 100644 index 0000000..acac0cf --- /dev/null +++ b/assets/static/bootstrap-icons/bookmark-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmark-x.svg b/assets/static/bootstrap-icons/bookmark-x.svg new file mode 100644 index 0000000..eb85c76 --- /dev/null +++ b/assets/static/bootstrap-icons/bookmark-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmark.svg b/assets/static/bootstrap-icons/bookmark.svg new file mode 100644 index 0000000..a21b14b --- /dev/null +++ b/assets/static/bootstrap-icons/bookmark.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmarks-fill.svg b/assets/static/bootstrap-icons/bookmarks-fill.svg new file mode 100644 index 0000000..abf5800 --- /dev/null +++ b/assets/static/bootstrap-icons/bookmarks-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookmarks.svg b/assets/static/bootstrap-icons/bookmarks.svg new file mode 100644 index 0000000..ceb92bb --- /dev/null +++ b/assets/static/bootstrap-icons/bookmarks.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bookshelf.svg b/assets/static/bootstrap-icons/bookshelf.svg new file mode 100644 index 0000000..7f435d5 --- /dev/null +++ b/assets/static/bootstrap-icons/bookshelf.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/boombox-fill.svg b/assets/static/bootstrap-icons/boombox-fill.svg new file mode 100644 index 0000000..299e95e --- /dev/null +++ b/assets/static/bootstrap-icons/boombox-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/boombox.svg b/assets/static/bootstrap-icons/boombox.svg new file mode 100644 index 0000000..35af807 --- /dev/null +++ b/assets/static/bootstrap-icons/boombox.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bootstrap-fill.svg b/assets/static/bootstrap-icons/bootstrap-fill.svg new file mode 100644 index 0000000..21253b0 --- /dev/null +++ b/assets/static/bootstrap-icons/bootstrap-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bootstrap-icons.svg b/assets/static/bootstrap-icons/bootstrap-icons.svg new file mode 100644 index 0000000..b7d55a8 --- /dev/null +++ b/assets/static/bootstrap-icons/bootstrap-icons.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bootstrap-reboot.svg b/assets/static/bootstrap-icons/bootstrap-reboot.svg new file mode 100644 index 0000000..8d21030 --- /dev/null +++ b/assets/static/bootstrap-icons/bootstrap-reboot.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bootstrap.svg b/assets/static/bootstrap-icons/bootstrap.svg new file mode 100644 index 0000000..089e31f --- /dev/null +++ b/assets/static/bootstrap-icons/bootstrap.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/border-all.svg b/assets/static/bootstrap-icons/border-all.svg new file mode 100644 index 0000000..19128f2 --- /dev/null +++ b/assets/static/bootstrap-icons/border-all.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/border-bottom.svg b/assets/static/bootstrap-icons/border-bottom.svg new file mode 100644 index 0000000..84edcca --- /dev/null +++ b/assets/static/bootstrap-icons/border-bottom.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/border-center.svg b/assets/static/bootstrap-icons/border-center.svg new file mode 100644 index 0000000..a9cf9c4 --- /dev/null +++ b/assets/static/bootstrap-icons/border-center.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/border-inner.svg b/assets/static/bootstrap-icons/border-inner.svg new file mode 100644 index 0000000..6369007 --- /dev/null +++ b/assets/static/bootstrap-icons/border-inner.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/border-left.svg b/assets/static/bootstrap-icons/border-left.svg new file mode 100644 index 0000000..483c804 --- /dev/null +++ b/assets/static/bootstrap-icons/border-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/border-middle.svg b/assets/static/bootstrap-icons/border-middle.svg new file mode 100644 index 0000000..c9de407 --- /dev/null +++ b/assets/static/bootstrap-icons/border-middle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/border-outer.svg b/assets/static/bootstrap-icons/border-outer.svg new file mode 100644 index 0000000..4791bcb --- /dev/null +++ b/assets/static/bootstrap-icons/border-outer.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/border-right.svg b/assets/static/bootstrap-icons/border-right.svg new file mode 100644 index 0000000..23e09dc --- /dev/null +++ b/assets/static/bootstrap-icons/border-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/border-style.svg b/assets/static/bootstrap-icons/border-style.svg new file mode 100644 index 0000000..cec3fef --- /dev/null +++ b/assets/static/bootstrap-icons/border-style.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/border-top.svg b/assets/static/bootstrap-icons/border-top.svg new file mode 100644 index 0000000..77189df --- /dev/null +++ b/assets/static/bootstrap-icons/border-top.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/border-width.svg b/assets/static/bootstrap-icons/border-width.svg new file mode 100644 index 0000000..6175326 --- /dev/null +++ b/assets/static/bootstrap-icons/border-width.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/border.svg b/assets/static/bootstrap-icons/border.svg new file mode 100644 index 0000000..a6390f9 --- /dev/null +++ b/assets/static/bootstrap-icons/border.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bounding-box-circles.svg b/assets/static/bootstrap-icons/bounding-box-circles.svg new file mode 100644 index 0000000..02113ba --- /dev/null +++ b/assets/static/bootstrap-icons/bounding-box-circles.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bounding-box.svg b/assets/static/bootstrap-icons/bounding-box.svg new file mode 100644 index 0000000..e8be147 --- /dev/null +++ b/assets/static/bootstrap-icons/bounding-box.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-down-left.svg b/assets/static/bootstrap-icons/box-arrow-down-left.svg new file mode 100644 index 0000000..20ffed9 --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-down-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-down-right.svg b/assets/static/bootstrap-icons/box-arrow-down-right.svg new file mode 100644 index 0000000..33780ef --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-down-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-down.svg b/assets/static/bootstrap-icons/box-arrow-down.svg new file mode 100644 index 0000000..bf33d51 --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-in-down-left.svg b/assets/static/bootstrap-icons/box-arrow-in-down-left.svg new file mode 100644 index 0000000..fe3c579 --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-in-down-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-in-down-right.svg b/assets/static/bootstrap-icons/box-arrow-in-down-right.svg new file mode 100644 index 0000000..07082eb --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-in-down-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-in-down.svg b/assets/static/bootstrap-icons/box-arrow-in-down.svg new file mode 100644 index 0000000..3b185d6 --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-in-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-in-left.svg b/assets/static/bootstrap-icons/box-arrow-in-left.svg new file mode 100644 index 0000000..1e1bc9a --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-in-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-in-right.svg b/assets/static/bootstrap-icons/box-arrow-in-right.svg new file mode 100644 index 0000000..5d78def --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-in-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-in-up-left.svg b/assets/static/bootstrap-icons/box-arrow-in-up-left.svg new file mode 100644 index 0000000..8401c43 --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-in-up-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-in-up-right.svg b/assets/static/bootstrap-icons/box-arrow-in-up-right.svg new file mode 100644 index 0000000..8a95e00 --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-in-up-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-in-up.svg b/assets/static/bootstrap-icons/box-arrow-in-up.svg new file mode 100644 index 0000000..6197bc3 --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-in-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-left.svg b/assets/static/bootstrap-icons/box-arrow-left.svg new file mode 100644 index 0000000..5d142b4 --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-right.svg b/assets/static/bootstrap-icons/box-arrow-right.svg new file mode 100644 index 0000000..682e033 --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-up-left.svg b/assets/static/bootstrap-icons/box-arrow-up-left.svg new file mode 100644 index 0000000..7dec12d --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-up-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-up-right.svg b/assets/static/bootstrap-icons/box-arrow-up-right.svg new file mode 100644 index 0000000..03f68d5 --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-up-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-arrow-up.svg b/assets/static/bootstrap-icons/box-arrow-up.svg new file mode 100644 index 0000000..8f76892 --- /dev/null +++ b/assets/static/bootstrap-icons/box-arrow-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-fill.svg b/assets/static/bootstrap-icons/box-fill.svg new file mode 100644 index 0000000..b1fe407 --- /dev/null +++ b/assets/static/bootstrap-icons/box-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-seam-fill.svg b/assets/static/bootstrap-icons/box-seam-fill.svg new file mode 100644 index 0000000..b9283c7 --- /dev/null +++ b/assets/static/bootstrap-icons/box-seam-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box-seam.svg b/assets/static/bootstrap-icons/box-seam.svg new file mode 100644 index 0000000..ec2cb8a --- /dev/null +++ b/assets/static/bootstrap-icons/box-seam.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box.svg b/assets/static/bootstrap-icons/box.svg new file mode 100644 index 0000000..01b34c7 --- /dev/null +++ b/assets/static/bootstrap-icons/box.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box2-fill.svg b/assets/static/bootstrap-icons/box2-fill.svg new file mode 100644 index 0000000..78e7583 --- /dev/null +++ b/assets/static/bootstrap-icons/box2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box2-heart-fill.svg b/assets/static/bootstrap-icons/box2-heart-fill.svg new file mode 100644 index 0000000..49da486 --- /dev/null +++ b/assets/static/bootstrap-icons/box2-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box2-heart.svg b/assets/static/bootstrap-icons/box2-heart.svg new file mode 100644 index 0000000..a5e413a --- /dev/null +++ b/assets/static/bootstrap-icons/box2-heart.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/box2.svg b/assets/static/bootstrap-icons/box2.svg new file mode 100644 index 0000000..bfeb554 --- /dev/null +++ b/assets/static/bootstrap-icons/box2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/boxes.svg b/assets/static/bootstrap-icons/boxes.svg new file mode 100644 index 0000000..af0d1d0 --- /dev/null +++ b/assets/static/bootstrap-icons/boxes.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/braces-asterisk.svg b/assets/static/bootstrap-icons/braces-asterisk.svg new file mode 100644 index 0000000..e159e9c --- /dev/null +++ b/assets/static/bootstrap-icons/braces-asterisk.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/braces.svg b/assets/static/bootstrap-icons/braces.svg new file mode 100644 index 0000000..d345d3b --- /dev/null +++ b/assets/static/bootstrap-icons/braces.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bricks.svg b/assets/static/bootstrap-icons/bricks.svg new file mode 100644 index 0000000..23c2c36 --- /dev/null +++ b/assets/static/bootstrap-icons/bricks.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/briefcase-fill.svg b/assets/static/bootstrap-icons/briefcase-fill.svg new file mode 100644 index 0000000..b37f2be --- /dev/null +++ b/assets/static/bootstrap-icons/briefcase-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/briefcase.svg b/assets/static/bootstrap-icons/briefcase.svg new file mode 100644 index 0000000..712998d --- /dev/null +++ b/assets/static/bootstrap-icons/briefcase.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/brightness-alt-high-fill.svg b/assets/static/bootstrap-icons/brightness-alt-high-fill.svg new file mode 100644 index 0000000..06f7d0c --- /dev/null +++ b/assets/static/bootstrap-icons/brightness-alt-high-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/brightness-alt-high.svg b/assets/static/bootstrap-icons/brightness-alt-high.svg new file mode 100644 index 0000000..e519ca7 --- /dev/null +++ b/assets/static/bootstrap-icons/brightness-alt-high.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/brightness-alt-low-fill.svg b/assets/static/bootstrap-icons/brightness-alt-low-fill.svg new file mode 100644 index 0000000..ab30837 --- /dev/null +++ b/assets/static/bootstrap-icons/brightness-alt-low-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/brightness-alt-low.svg b/assets/static/bootstrap-icons/brightness-alt-low.svg new file mode 100644 index 0000000..58bf6ed --- /dev/null +++ b/assets/static/bootstrap-icons/brightness-alt-low.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/brightness-high-fill.svg b/assets/static/bootstrap-icons/brightness-high-fill.svg new file mode 100644 index 0000000..b759b04 --- /dev/null +++ b/assets/static/bootstrap-icons/brightness-high-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/brightness-high.svg b/assets/static/bootstrap-icons/brightness-high.svg new file mode 100644 index 0000000..f00d050 --- /dev/null +++ b/assets/static/bootstrap-icons/brightness-high.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/brightness-low-fill.svg b/assets/static/bootstrap-icons/brightness-low-fill.svg new file mode 100644 index 0000000..fc55680 --- /dev/null +++ b/assets/static/bootstrap-icons/brightness-low-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/brightness-low.svg b/assets/static/bootstrap-icons/brightness-low.svg new file mode 100644 index 0000000..317918e --- /dev/null +++ b/assets/static/bootstrap-icons/brightness-low.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/brilliance.svg b/assets/static/bootstrap-icons/brilliance.svg new file mode 100644 index 0000000..f6b5da6 --- /dev/null +++ b/assets/static/bootstrap-icons/brilliance.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/broadcast-pin.svg b/assets/static/bootstrap-icons/broadcast-pin.svg new file mode 100644 index 0000000..9c5f4a6 --- /dev/null +++ b/assets/static/bootstrap-icons/broadcast-pin.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/broadcast.svg b/assets/static/bootstrap-icons/broadcast.svg new file mode 100644 index 0000000..b420a0b --- /dev/null +++ b/assets/static/bootstrap-icons/broadcast.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/browser-chrome.svg b/assets/static/bootstrap-icons/browser-chrome.svg new file mode 100644 index 0000000..63c344b --- /dev/null +++ b/assets/static/bootstrap-icons/browser-chrome.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/browser-edge.svg b/assets/static/bootstrap-icons/browser-edge.svg new file mode 100644 index 0000000..ed1dc7c --- /dev/null +++ b/assets/static/bootstrap-icons/browser-edge.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/browser-firefox.svg b/assets/static/bootstrap-icons/browser-firefox.svg new file mode 100644 index 0000000..ce0eabb --- /dev/null +++ b/assets/static/bootstrap-icons/browser-firefox.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/browser-safari.svg b/assets/static/bootstrap-icons/browser-safari.svg new file mode 100644 index 0000000..8c01296 --- /dev/null +++ b/assets/static/bootstrap-icons/browser-safari.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/brush-fill.svg b/assets/static/bootstrap-icons/brush-fill.svg new file mode 100644 index 0000000..db77615 --- /dev/null +++ b/assets/static/bootstrap-icons/brush-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/brush.svg b/assets/static/bootstrap-icons/brush.svg new file mode 100644 index 0000000..86d88ef --- /dev/null +++ b/assets/static/bootstrap-icons/brush.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bucket-fill.svg b/assets/static/bootstrap-icons/bucket-fill.svg new file mode 100644 index 0000000..c0c95ab --- /dev/null +++ b/assets/static/bootstrap-icons/bucket-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bucket.svg b/assets/static/bootstrap-icons/bucket.svg new file mode 100644 index 0000000..252e75b --- /dev/null +++ b/assets/static/bootstrap-icons/bucket.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bug-fill.svg b/assets/static/bootstrap-icons/bug-fill.svg new file mode 100644 index 0000000..a36ff37 --- /dev/null +++ b/assets/static/bootstrap-icons/bug-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bug.svg b/assets/static/bootstrap-icons/bug.svg new file mode 100644 index 0000000..296ef32 --- /dev/null +++ b/assets/static/bootstrap-icons/bug.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-add.svg b/assets/static/bootstrap-icons/building-add.svg new file mode 100644 index 0000000..c2c3670 --- /dev/null +++ b/assets/static/bootstrap-icons/building-add.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-check.svg b/assets/static/bootstrap-icons/building-check.svg new file mode 100644 index 0000000..95c3c54 --- /dev/null +++ b/assets/static/bootstrap-icons/building-check.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-dash.svg b/assets/static/bootstrap-icons/building-dash.svg new file mode 100644 index 0000000..1e1634b --- /dev/null +++ b/assets/static/bootstrap-icons/building-dash.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-down.svg b/assets/static/bootstrap-icons/building-down.svg new file mode 100644 index 0000000..8538cf6 --- /dev/null +++ b/assets/static/bootstrap-icons/building-down.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-exclamation.svg b/assets/static/bootstrap-icons/building-exclamation.svg new file mode 100644 index 0000000..ebfc709 --- /dev/null +++ b/assets/static/bootstrap-icons/building-exclamation.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-fill-add.svg b/assets/static/bootstrap-icons/building-fill-add.svg new file mode 100644 index 0000000..6bbe567 --- /dev/null +++ b/assets/static/bootstrap-icons/building-fill-add.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-fill-check.svg b/assets/static/bootstrap-icons/building-fill-check.svg new file mode 100644 index 0000000..c4f1881 --- /dev/null +++ b/assets/static/bootstrap-icons/building-fill-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-fill-dash.svg b/assets/static/bootstrap-icons/building-fill-dash.svg new file mode 100644 index 0000000..1ce28a6 --- /dev/null +++ b/assets/static/bootstrap-icons/building-fill-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-fill-down.svg b/assets/static/bootstrap-icons/building-fill-down.svg new file mode 100644 index 0000000..b1c55cd --- /dev/null +++ b/assets/static/bootstrap-icons/building-fill-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-fill-exclamation.svg b/assets/static/bootstrap-icons/building-fill-exclamation.svg new file mode 100644 index 0000000..3491f24 --- /dev/null +++ b/assets/static/bootstrap-icons/building-fill-exclamation.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-fill-gear.svg b/assets/static/bootstrap-icons/building-fill-gear.svg new file mode 100644 index 0000000..747a1bc --- /dev/null +++ b/assets/static/bootstrap-icons/building-fill-gear.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-fill-lock.svg b/assets/static/bootstrap-icons/building-fill-lock.svg new file mode 100644 index 0000000..be73a41 --- /dev/null +++ b/assets/static/bootstrap-icons/building-fill-lock.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-fill-slash.svg b/assets/static/bootstrap-icons/building-fill-slash.svg new file mode 100644 index 0000000..d867309 --- /dev/null +++ b/assets/static/bootstrap-icons/building-fill-slash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-fill-up.svg b/assets/static/bootstrap-icons/building-fill-up.svg new file mode 100644 index 0000000..d8cc4bc --- /dev/null +++ b/assets/static/bootstrap-icons/building-fill-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-fill-x.svg b/assets/static/bootstrap-icons/building-fill-x.svg new file mode 100644 index 0000000..236aae3 --- /dev/null +++ b/assets/static/bootstrap-icons/building-fill-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-fill.svg b/assets/static/bootstrap-icons/building-fill.svg new file mode 100644 index 0000000..6924b41 --- /dev/null +++ b/assets/static/bootstrap-icons/building-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-gear.svg b/assets/static/bootstrap-icons/building-gear.svg new file mode 100644 index 0000000..eabe790 --- /dev/null +++ b/assets/static/bootstrap-icons/building-gear.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-lock.svg b/assets/static/bootstrap-icons/building-lock.svg new file mode 100644 index 0000000..591a2e9 --- /dev/null +++ b/assets/static/bootstrap-icons/building-lock.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-slash.svg b/assets/static/bootstrap-icons/building-slash.svg new file mode 100644 index 0000000..c3f7787 --- /dev/null +++ b/assets/static/bootstrap-icons/building-slash.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-up.svg b/assets/static/bootstrap-icons/building-up.svg new file mode 100644 index 0000000..ff2d5d9 --- /dev/null +++ b/assets/static/bootstrap-icons/building-up.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building-x.svg b/assets/static/bootstrap-icons/building-x.svg new file mode 100644 index 0000000..70e67a3 --- /dev/null +++ b/assets/static/bootstrap-icons/building-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/building.svg b/assets/static/bootstrap-icons/building.svg new file mode 100644 index 0000000..916b049 --- /dev/null +++ b/assets/static/bootstrap-icons/building.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/buildings-fill.svg b/assets/static/bootstrap-icons/buildings-fill.svg new file mode 100644 index 0000000..6aea68d --- /dev/null +++ b/assets/static/bootstrap-icons/buildings-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/buildings.svg b/assets/static/bootstrap-icons/buildings.svg new file mode 100644 index 0000000..3028498 --- /dev/null +++ b/assets/static/bootstrap-icons/buildings.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bullseye.svg b/assets/static/bootstrap-icons/bullseye.svg new file mode 100644 index 0000000..16c2207 --- /dev/null +++ b/assets/static/bootstrap-icons/bullseye.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bus-front-fill.svg b/assets/static/bootstrap-icons/bus-front-fill.svg new file mode 100644 index 0000000..de21228 --- /dev/null +++ b/assets/static/bootstrap-icons/bus-front-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/bus-front.svg b/assets/static/bootstrap-icons/bus-front.svg new file mode 100644 index 0000000..95c5df5 --- /dev/null +++ b/assets/static/bootstrap-icons/bus-front.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/c-circle-fill.svg b/assets/static/bootstrap-icons/c-circle-fill.svg new file mode 100644 index 0000000..c0adc18 --- /dev/null +++ b/assets/static/bootstrap-icons/c-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/c-circle.svg b/assets/static/bootstrap-icons/c-circle.svg new file mode 100644 index 0000000..ac3dfac --- /dev/null +++ b/assets/static/bootstrap-icons/c-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/c-square-fill.svg b/assets/static/bootstrap-icons/c-square-fill.svg new file mode 100644 index 0000000..b26a27e --- /dev/null +++ b/assets/static/bootstrap-icons/c-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/c-square.svg b/assets/static/bootstrap-icons/c-square.svg new file mode 100644 index 0000000..cdd74a3 --- /dev/null +++ b/assets/static/bootstrap-icons/c-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cake-fill.svg b/assets/static/bootstrap-icons/cake-fill.svg new file mode 100644 index 0000000..4370e02 --- /dev/null +++ b/assets/static/bootstrap-icons/cake-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cake.svg b/assets/static/bootstrap-icons/cake.svg new file mode 100644 index 0000000..500747b --- /dev/null +++ b/assets/static/bootstrap-icons/cake.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cake2-fill.svg b/assets/static/bootstrap-icons/cake2-fill.svg new file mode 100644 index 0000000..1ed25f7 --- /dev/null +++ b/assets/static/bootstrap-icons/cake2-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cake2.svg b/assets/static/bootstrap-icons/cake2.svg new file mode 100644 index 0000000..a10dc80 --- /dev/null +++ b/assets/static/bootstrap-icons/cake2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calculator-fill.svg b/assets/static/bootstrap-icons/calculator-fill.svg new file mode 100644 index 0000000..2933419 --- /dev/null +++ b/assets/static/bootstrap-icons/calculator-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calculator.svg b/assets/static/bootstrap-icons/calculator.svg new file mode 100644 index 0000000..cc9761e --- /dev/null +++ b/assets/static/bootstrap-icons/calculator.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-check-fill.svg b/assets/static/bootstrap-icons/calendar-check-fill.svg new file mode 100644 index 0000000..967d182 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-check.svg b/assets/static/bootstrap-icons/calendar-check.svg new file mode 100644 index 0000000..f778cd2 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-date-fill.svg b/assets/static/bootstrap-icons/calendar-date-fill.svg new file mode 100644 index 0000000..59b31f2 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-date-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-date.svg b/assets/static/bootstrap-icons/calendar-date.svg new file mode 100644 index 0000000..b73c8f5 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-date.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-day-fill.svg b/assets/static/bootstrap-icons/calendar-day-fill.svg new file mode 100644 index 0000000..b9bcbf8 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-day-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-day.svg b/assets/static/bootstrap-icons/calendar-day.svg new file mode 100644 index 0000000..6f8d871 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-day.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-event-fill.svg b/assets/static/bootstrap-icons/calendar-event-fill.svg new file mode 100644 index 0000000..5b09eea --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-event-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-event.svg b/assets/static/bootstrap-icons/calendar-event.svg new file mode 100644 index 0000000..57c734b --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-event.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-fill.svg b/assets/static/bootstrap-icons/calendar-fill.svg new file mode 100644 index 0000000..789eb8b --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-heart-fill.svg b/assets/static/bootstrap-icons/calendar-heart-fill.svg new file mode 100644 index 0000000..63d9e4c --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-heart.svg b/assets/static/bootstrap-icons/calendar-heart.svg new file mode 100644 index 0000000..8ed9c38 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-minus-fill.svg b/assets/static/bootstrap-icons/calendar-minus-fill.svg new file mode 100644 index 0000000..8dad6e1 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-minus.svg b/assets/static/bootstrap-icons/calendar-minus.svg new file mode 100644 index 0000000..ecd4e97 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-month-fill.svg b/assets/static/bootstrap-icons/calendar-month-fill.svg new file mode 100644 index 0000000..d8d56fe --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-month-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-month.svg b/assets/static/bootstrap-icons/calendar-month.svg new file mode 100644 index 0000000..95b6419 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-month.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-plus-fill.svg b/assets/static/bootstrap-icons/calendar-plus-fill.svg new file mode 100644 index 0000000..0ed0c83 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-plus.svg b/assets/static/bootstrap-icons/calendar-plus.svg new file mode 100644 index 0000000..189b152 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-range-fill.svg b/assets/static/bootstrap-icons/calendar-range-fill.svg new file mode 100644 index 0000000..324def0 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-range-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-range.svg b/assets/static/bootstrap-icons/calendar-range.svg new file mode 100644 index 0000000..7db0947 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-range.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-week-fill.svg b/assets/static/bootstrap-icons/calendar-week-fill.svg new file mode 100644 index 0000000..ab2128d --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-week-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-week.svg b/assets/static/bootstrap-icons/calendar-week.svg new file mode 100644 index 0000000..b5dbcc9 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-week.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-x-fill.svg b/assets/static/bootstrap-icons/calendar-x-fill.svg new file mode 100644 index 0000000..450e114 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar-x.svg b/assets/static/bootstrap-icons/calendar-x.svg new file mode 100644 index 0000000..dc85a91 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar.svg b/assets/static/bootstrap-icons/calendar.svg new file mode 100644 index 0000000..d32ebe7 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-check-fill.svg b/assets/static/bootstrap-icons/calendar2-check-fill.svg new file mode 100644 index 0000000..a0c36c5 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-check.svg b/assets/static/bootstrap-icons/calendar2-check.svg new file mode 100644 index 0000000..5429842 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-check.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-date-fill.svg b/assets/static/bootstrap-icons/calendar2-date-fill.svg new file mode 100644 index 0000000..93b3941 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-date-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-date.svg b/assets/static/bootstrap-icons/calendar2-date.svg new file mode 100644 index 0000000..61193cd --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-date.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-day-fill.svg b/assets/static/bootstrap-icons/calendar2-day-fill.svg new file mode 100644 index 0000000..b605453 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-day-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-day.svg b/assets/static/bootstrap-icons/calendar2-day.svg new file mode 100644 index 0000000..ce59878 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-day.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-event-fill.svg b/assets/static/bootstrap-icons/calendar2-event-fill.svg new file mode 100644 index 0000000..2b245d1 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-event-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-event.svg b/assets/static/bootstrap-icons/calendar2-event.svg new file mode 100644 index 0000000..36910dd --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-event.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-fill.svg b/assets/static/bootstrap-icons/calendar2-fill.svg new file mode 100644 index 0000000..b28e594 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-heart-fill.svg b/assets/static/bootstrap-icons/calendar2-heart-fill.svg new file mode 100644 index 0000000..f3723cd --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-heart.svg b/assets/static/bootstrap-icons/calendar2-heart.svg new file mode 100644 index 0000000..995d9b8 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-minus-fill.svg b/assets/static/bootstrap-icons/calendar2-minus-fill.svg new file mode 100644 index 0000000..bf52a36 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-minus.svg b/assets/static/bootstrap-icons/calendar2-minus.svg new file mode 100644 index 0000000..62e6bbc --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-minus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-month-fill.svg b/assets/static/bootstrap-icons/calendar2-month-fill.svg new file mode 100644 index 0000000..24b9c69 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-month-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-month.svg b/assets/static/bootstrap-icons/calendar2-month.svg new file mode 100644 index 0000000..65d8295 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-month.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-plus-fill.svg b/assets/static/bootstrap-icons/calendar2-plus-fill.svg new file mode 100644 index 0000000..26a2047 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-plus.svg b/assets/static/bootstrap-icons/calendar2-plus.svg new file mode 100644 index 0000000..728148f --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-range-fill.svg b/assets/static/bootstrap-icons/calendar2-range-fill.svg new file mode 100644 index 0000000..1ba46b6 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-range-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-range.svg b/assets/static/bootstrap-icons/calendar2-range.svg new file mode 100644 index 0000000..9a657f4 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-range.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-week-fill.svg b/assets/static/bootstrap-icons/calendar2-week-fill.svg new file mode 100644 index 0000000..f358667 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-week-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-week.svg b/assets/static/bootstrap-icons/calendar2-week.svg new file mode 100644 index 0000000..07906a9 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-week.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-x-fill.svg b/assets/static/bootstrap-icons/calendar2-x-fill.svg new file mode 100644 index 0000000..def799d --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2-x.svg b/assets/static/bootstrap-icons/calendar2-x.svg new file mode 100644 index 0000000..d6f9e6f --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2-x.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar2.svg b/assets/static/bootstrap-icons/calendar2.svg new file mode 100644 index 0000000..957f993 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar3-event-fill.svg b/assets/static/bootstrap-icons/calendar3-event-fill.svg new file mode 100644 index 0000000..d228ccb --- /dev/null +++ b/assets/static/bootstrap-icons/calendar3-event-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar3-event.svg b/assets/static/bootstrap-icons/calendar3-event.svg new file mode 100644 index 0000000..f702c36 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar3-event.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar3-fill.svg b/assets/static/bootstrap-icons/calendar3-fill.svg new file mode 100644 index 0000000..f3bc116 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar3-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar3-range-fill.svg b/assets/static/bootstrap-icons/calendar3-range-fill.svg new file mode 100644 index 0000000..e21d0ee --- /dev/null +++ b/assets/static/bootstrap-icons/calendar3-range-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar3-range.svg b/assets/static/bootstrap-icons/calendar3-range.svg new file mode 100644 index 0000000..c19d9ca --- /dev/null +++ b/assets/static/bootstrap-icons/calendar3-range.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar3-week-fill.svg b/assets/static/bootstrap-icons/calendar3-week-fill.svg new file mode 100644 index 0000000..d828d85 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar3-week-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar3-week.svg b/assets/static/bootstrap-icons/calendar3-week.svg new file mode 100644 index 0000000..6d577b7 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar3-week.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar3.svg b/assets/static/bootstrap-icons/calendar3.svg new file mode 100644 index 0000000..8e2aedf --- /dev/null +++ b/assets/static/bootstrap-icons/calendar3.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar4-event.svg b/assets/static/bootstrap-icons/calendar4-event.svg new file mode 100644 index 0000000..0d29c0c --- /dev/null +++ b/assets/static/bootstrap-icons/calendar4-event.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar4-range.svg b/assets/static/bootstrap-icons/calendar4-range.svg new file mode 100644 index 0000000..b260479 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar4-range.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar4-week.svg b/assets/static/bootstrap-icons/calendar4-week.svg new file mode 100644 index 0000000..d934881 --- /dev/null +++ b/assets/static/bootstrap-icons/calendar4-week.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/calendar4.svg b/assets/static/bootstrap-icons/calendar4.svg new file mode 100644 index 0000000..69c474c --- /dev/null +++ b/assets/static/bootstrap-icons/calendar4.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/camera-fill.svg b/assets/static/bootstrap-icons/camera-fill.svg new file mode 100644 index 0000000..6aa0240 --- /dev/null +++ b/assets/static/bootstrap-icons/camera-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/camera-reels-fill.svg b/assets/static/bootstrap-icons/camera-reels-fill.svg new file mode 100644 index 0000000..6bd48de --- /dev/null +++ b/assets/static/bootstrap-icons/camera-reels-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/camera-reels.svg b/assets/static/bootstrap-icons/camera-reels.svg new file mode 100644 index 0000000..0c6eca8 --- /dev/null +++ b/assets/static/bootstrap-icons/camera-reels.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/camera-video-fill.svg b/assets/static/bootstrap-icons/camera-video-fill.svg new file mode 100644 index 0000000..72dee37 --- /dev/null +++ b/assets/static/bootstrap-icons/camera-video-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/camera-video-off-fill.svg b/assets/static/bootstrap-icons/camera-video-off-fill.svg new file mode 100644 index 0000000..290dc19 --- /dev/null +++ b/assets/static/bootstrap-icons/camera-video-off-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/camera-video-off.svg b/assets/static/bootstrap-icons/camera-video-off.svg new file mode 100644 index 0000000..c9eb587 --- /dev/null +++ b/assets/static/bootstrap-icons/camera-video-off.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/camera-video.svg b/assets/static/bootstrap-icons/camera-video.svg new file mode 100644 index 0000000..a042d1a --- /dev/null +++ b/assets/static/bootstrap-icons/camera-video.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/camera.svg b/assets/static/bootstrap-icons/camera.svg new file mode 100644 index 0000000..3a926d5 --- /dev/null +++ b/assets/static/bootstrap-icons/camera.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/camera2.svg b/assets/static/bootstrap-icons/camera2.svg new file mode 100644 index 0000000..ba9521e --- /dev/null +++ b/assets/static/bootstrap-icons/camera2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/capslock-fill.svg b/assets/static/bootstrap-icons/capslock-fill.svg new file mode 100644 index 0000000..f1c0bab --- /dev/null +++ b/assets/static/bootstrap-icons/capslock-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/capslock.svg b/assets/static/bootstrap-icons/capslock.svg new file mode 100644 index 0000000..b0b894a --- /dev/null +++ b/assets/static/bootstrap-icons/capslock.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/capsule-pill.svg b/assets/static/bootstrap-icons/capsule-pill.svg new file mode 100644 index 0000000..b9f3b54 --- /dev/null +++ b/assets/static/bootstrap-icons/capsule-pill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/capsule.svg b/assets/static/bootstrap-icons/capsule.svg new file mode 100644 index 0000000..53d1a66 --- /dev/null +++ b/assets/static/bootstrap-icons/capsule.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/car-front-fill.svg b/assets/static/bootstrap-icons/car-front-fill.svg new file mode 100644 index 0000000..a47a870 --- /dev/null +++ b/assets/static/bootstrap-icons/car-front-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/car-front.svg b/assets/static/bootstrap-icons/car-front.svg new file mode 100644 index 0000000..890e4cf --- /dev/null +++ b/assets/static/bootstrap-icons/car-front.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/card-checklist.svg b/assets/static/bootstrap-icons/card-checklist.svg new file mode 100644 index 0000000..3044e68 --- /dev/null +++ b/assets/static/bootstrap-icons/card-checklist.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/card-heading.svg b/assets/static/bootstrap-icons/card-heading.svg new file mode 100644 index 0000000..a6be873 --- /dev/null +++ b/assets/static/bootstrap-icons/card-heading.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/card-image.svg b/assets/static/bootstrap-icons/card-image.svg new file mode 100644 index 0000000..7343f77 --- /dev/null +++ b/assets/static/bootstrap-icons/card-image.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/card-list.svg b/assets/static/bootstrap-icons/card-list.svg new file mode 100644 index 0000000..6270802 --- /dev/null +++ b/assets/static/bootstrap-icons/card-list.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/card-text.svg b/assets/static/bootstrap-icons/card-text.svg new file mode 100644 index 0000000..8f7470c --- /dev/null +++ b/assets/static/bootstrap-icons/card-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-down-fill.svg b/assets/static/bootstrap-icons/caret-down-fill.svg new file mode 100644 index 0000000..d7c3990 --- /dev/null +++ b/assets/static/bootstrap-icons/caret-down-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-down-square-fill.svg b/assets/static/bootstrap-icons/caret-down-square-fill.svg new file mode 100644 index 0000000..63199bb --- /dev/null +++ b/assets/static/bootstrap-icons/caret-down-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-down-square.svg b/assets/static/bootstrap-icons/caret-down-square.svg new file mode 100644 index 0000000..0372625 --- /dev/null +++ b/assets/static/bootstrap-icons/caret-down-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-down.svg b/assets/static/bootstrap-icons/caret-down.svg new file mode 100644 index 0000000..627258a --- /dev/null +++ b/assets/static/bootstrap-icons/caret-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-left-fill.svg b/assets/static/bootstrap-icons/caret-left-fill.svg new file mode 100644 index 0000000..d989dff --- /dev/null +++ b/assets/static/bootstrap-icons/caret-left-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-left-square-fill.svg b/assets/static/bootstrap-icons/caret-left-square-fill.svg new file mode 100644 index 0000000..cc7e3a8 --- /dev/null +++ b/assets/static/bootstrap-icons/caret-left-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-left-square.svg b/assets/static/bootstrap-icons/caret-left-square.svg new file mode 100644 index 0000000..5e8cb20 --- /dev/null +++ b/assets/static/bootstrap-icons/caret-left-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-left.svg b/assets/static/bootstrap-icons/caret-left.svg new file mode 100644 index 0000000..4415336 --- /dev/null +++ b/assets/static/bootstrap-icons/caret-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-right-fill.svg b/assets/static/bootstrap-icons/caret-right-fill.svg new file mode 100644 index 0000000..b445551 --- /dev/null +++ b/assets/static/bootstrap-icons/caret-right-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-right-square-fill.svg b/assets/static/bootstrap-icons/caret-right-square-fill.svg new file mode 100644 index 0000000..2aded36 --- /dev/null +++ b/assets/static/bootstrap-icons/caret-right-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-right-square.svg b/assets/static/bootstrap-icons/caret-right-square.svg new file mode 100644 index 0000000..a3a44e2 --- /dev/null +++ b/assets/static/bootstrap-icons/caret-right-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-right.svg b/assets/static/bootstrap-icons/caret-right.svg new file mode 100644 index 0000000..7bcd8bb --- /dev/null +++ b/assets/static/bootstrap-icons/caret-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-up-fill.svg b/assets/static/bootstrap-icons/caret-up-fill.svg new file mode 100644 index 0000000..a87820e --- /dev/null +++ b/assets/static/bootstrap-icons/caret-up-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-up-square-fill.svg b/assets/static/bootstrap-icons/caret-up-square-fill.svg new file mode 100644 index 0000000..348fcf2 --- /dev/null +++ b/assets/static/bootstrap-icons/caret-up-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-up-square.svg b/assets/static/bootstrap-icons/caret-up-square.svg new file mode 100644 index 0000000..8ac2af4 --- /dev/null +++ b/assets/static/bootstrap-icons/caret-up-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/caret-up.svg b/assets/static/bootstrap-icons/caret-up.svg new file mode 100644 index 0000000..8e33519 --- /dev/null +++ b/assets/static/bootstrap-icons/caret-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cart-check-fill.svg b/assets/static/bootstrap-icons/cart-check-fill.svg new file mode 100644 index 0000000..612358c --- /dev/null +++ b/assets/static/bootstrap-icons/cart-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cart-check.svg b/assets/static/bootstrap-icons/cart-check.svg new file mode 100644 index 0000000..68301db --- /dev/null +++ b/assets/static/bootstrap-icons/cart-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cart-dash-fill.svg b/assets/static/bootstrap-icons/cart-dash-fill.svg new file mode 100644 index 0000000..a335b07 --- /dev/null +++ b/assets/static/bootstrap-icons/cart-dash-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cart-dash.svg b/assets/static/bootstrap-icons/cart-dash.svg new file mode 100644 index 0000000..9c97c3b --- /dev/null +++ b/assets/static/bootstrap-icons/cart-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cart-fill.svg b/assets/static/bootstrap-icons/cart-fill.svg new file mode 100644 index 0000000..974fc29 --- /dev/null +++ b/assets/static/bootstrap-icons/cart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cart-plus-fill.svg b/assets/static/bootstrap-icons/cart-plus-fill.svg new file mode 100644 index 0000000..59e46e4 --- /dev/null +++ b/assets/static/bootstrap-icons/cart-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cart-plus.svg b/assets/static/bootstrap-icons/cart-plus.svg new file mode 100644 index 0000000..2baaae4 --- /dev/null +++ b/assets/static/bootstrap-icons/cart-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cart-x-fill.svg b/assets/static/bootstrap-icons/cart-x-fill.svg new file mode 100644 index 0000000..7ca0688 --- /dev/null +++ b/assets/static/bootstrap-icons/cart-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cart-x.svg b/assets/static/bootstrap-icons/cart-x.svg new file mode 100644 index 0000000..2d8f213 --- /dev/null +++ b/assets/static/bootstrap-icons/cart-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cart.svg b/assets/static/bootstrap-icons/cart.svg new file mode 100644 index 0000000..0e0f96c --- /dev/null +++ b/assets/static/bootstrap-icons/cart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cart2.svg b/assets/static/bootstrap-icons/cart2.svg new file mode 100644 index 0000000..ea7f696 --- /dev/null +++ b/assets/static/bootstrap-icons/cart2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cart3.svg b/assets/static/bootstrap-icons/cart3.svg new file mode 100644 index 0000000..af1b3c5 --- /dev/null +++ b/assets/static/bootstrap-icons/cart3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cart4.svg b/assets/static/bootstrap-icons/cart4.svg new file mode 100644 index 0000000..4631ac9 --- /dev/null +++ b/assets/static/bootstrap-icons/cart4.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cash-coin.svg b/assets/static/bootstrap-icons/cash-coin.svg new file mode 100644 index 0000000..2904f15 --- /dev/null +++ b/assets/static/bootstrap-icons/cash-coin.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cash-stack.svg b/assets/static/bootstrap-icons/cash-stack.svg new file mode 100644 index 0000000..fc8c282 --- /dev/null +++ b/assets/static/bootstrap-icons/cash-stack.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cash.svg b/assets/static/bootstrap-icons/cash.svg new file mode 100644 index 0000000..18cbff3 --- /dev/null +++ b/assets/static/bootstrap-icons/cash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cassette-fill.svg b/assets/static/bootstrap-icons/cassette-fill.svg new file mode 100644 index 0000000..18fd5e4 --- /dev/null +++ b/assets/static/bootstrap-icons/cassette-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cassette.svg b/assets/static/bootstrap-icons/cassette.svg new file mode 100644 index 0000000..2effe71 --- /dev/null +++ b/assets/static/bootstrap-icons/cassette.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cast.svg b/assets/static/bootstrap-icons/cast.svg new file mode 100644 index 0000000..01a9795 --- /dev/null +++ b/assets/static/bootstrap-icons/cast.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cc-circle-fill.svg b/assets/static/bootstrap-icons/cc-circle-fill.svg new file mode 100644 index 0000000..483d90c --- /dev/null +++ b/assets/static/bootstrap-icons/cc-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cc-circle.svg b/assets/static/bootstrap-icons/cc-circle.svg new file mode 100644 index 0000000..2dc2b4b --- /dev/null +++ b/assets/static/bootstrap-icons/cc-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cc-square-fill.svg b/assets/static/bootstrap-icons/cc-square-fill.svg new file mode 100644 index 0000000..b0a8350 --- /dev/null +++ b/assets/static/bootstrap-icons/cc-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cc-square.svg b/assets/static/bootstrap-icons/cc-square.svg new file mode 100644 index 0000000..b0f05b6 --- /dev/null +++ b/assets/static/bootstrap-icons/cc-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-dots-fill.svg b/assets/static/bootstrap-icons/chat-dots-fill.svg new file mode 100644 index 0000000..5f74345 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-dots-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-dots.svg b/assets/static/bootstrap-icons/chat-dots.svg new file mode 100644 index 0000000..20137cc --- /dev/null +++ b/assets/static/bootstrap-icons/chat-dots.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-fill.svg b/assets/static/bootstrap-icons/chat-fill.svg new file mode 100644 index 0000000..c896939 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-heart-fill.svg b/assets/static/bootstrap-icons/chat-heart-fill.svg new file mode 100644 index 0000000..ea01c34 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-heart.svg b/assets/static/bootstrap-icons/chat-heart.svg new file mode 100644 index 0000000..8ea104e --- /dev/null +++ b/assets/static/bootstrap-icons/chat-heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-left-dots-fill.svg b/assets/static/bootstrap-icons/chat-left-dots-fill.svg new file mode 100644 index 0000000..a6614c3 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-left-dots-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-left-dots.svg b/assets/static/bootstrap-icons/chat-left-dots.svg new file mode 100644 index 0000000..35f466a --- /dev/null +++ b/assets/static/bootstrap-icons/chat-left-dots.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-left-fill.svg b/assets/static/bootstrap-icons/chat-left-fill.svg new file mode 100644 index 0000000..0de6e13 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-left-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-left-heart-fill.svg b/assets/static/bootstrap-icons/chat-left-heart-fill.svg new file mode 100644 index 0000000..cc9502c --- /dev/null +++ b/assets/static/bootstrap-icons/chat-left-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-left-heart.svg b/assets/static/bootstrap-icons/chat-left-heart.svg new file mode 100644 index 0000000..ec11692 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-left-heart.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-left-quote-fill.svg b/assets/static/bootstrap-icons/chat-left-quote-fill.svg new file mode 100644 index 0000000..d634a12 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-left-quote-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-left-quote.svg b/assets/static/bootstrap-icons/chat-left-quote.svg new file mode 100644 index 0000000..376ceb1 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-left-quote.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-left-text-fill.svg b/assets/static/bootstrap-icons/chat-left-text-fill.svg new file mode 100644 index 0000000..a78e343 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-left-text-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-left-text.svg b/assets/static/bootstrap-icons/chat-left-text.svg new file mode 100644 index 0000000..88d1906 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-left-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-left.svg b/assets/static/bootstrap-icons/chat-left.svg new file mode 100644 index 0000000..d93f0af --- /dev/null +++ b/assets/static/bootstrap-icons/chat-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-quote-fill.svg b/assets/static/bootstrap-icons/chat-quote-fill.svg new file mode 100644 index 0000000..7150c44 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-quote-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-quote.svg b/assets/static/bootstrap-icons/chat-quote.svg new file mode 100644 index 0000000..aa0edc4 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-quote.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-right-dots-fill.svg b/assets/static/bootstrap-icons/chat-right-dots-fill.svg new file mode 100644 index 0000000..1020581 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-right-dots-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-right-dots.svg b/assets/static/bootstrap-icons/chat-right-dots.svg new file mode 100644 index 0000000..d9b8bd2 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-right-dots.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-right-fill.svg b/assets/static/bootstrap-icons/chat-right-fill.svg new file mode 100644 index 0000000..6381ddc --- /dev/null +++ b/assets/static/bootstrap-icons/chat-right-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-right-heart-fill.svg b/assets/static/bootstrap-icons/chat-right-heart-fill.svg new file mode 100644 index 0000000..cf4abfe --- /dev/null +++ b/assets/static/bootstrap-icons/chat-right-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-right-heart.svg b/assets/static/bootstrap-icons/chat-right-heart.svg new file mode 100644 index 0000000..e6b3880 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-right-heart.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-right-quote-fill.svg b/assets/static/bootstrap-icons/chat-right-quote-fill.svg new file mode 100644 index 0000000..1c4e536 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-right-quote-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-right-quote.svg b/assets/static/bootstrap-icons/chat-right-quote.svg new file mode 100644 index 0000000..e9091bc --- /dev/null +++ b/assets/static/bootstrap-icons/chat-right-quote.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-right-text-fill.svg b/assets/static/bootstrap-icons/chat-right-text-fill.svg new file mode 100644 index 0000000..3455983 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-right-text-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-right-text.svg b/assets/static/bootstrap-icons/chat-right-text.svg new file mode 100644 index 0000000..88341af --- /dev/null +++ b/assets/static/bootstrap-icons/chat-right-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-right.svg b/assets/static/bootstrap-icons/chat-right.svg new file mode 100644 index 0000000..a930c9a --- /dev/null +++ b/assets/static/bootstrap-icons/chat-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-square-dots-fill.svg b/assets/static/bootstrap-icons/chat-square-dots-fill.svg new file mode 100644 index 0000000..09c97d1 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-square-dots-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-square-dots.svg b/assets/static/bootstrap-icons/chat-square-dots.svg new file mode 100644 index 0000000..b06c02f --- /dev/null +++ b/assets/static/bootstrap-icons/chat-square-dots.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-square-fill.svg b/assets/static/bootstrap-icons/chat-square-fill.svg new file mode 100644 index 0000000..4688831 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-square-heart-fill.svg b/assets/static/bootstrap-icons/chat-square-heart-fill.svg new file mode 100644 index 0000000..902e0b5 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-square-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-square-heart.svg b/assets/static/bootstrap-icons/chat-square-heart.svg new file mode 100644 index 0000000..6ba687e --- /dev/null +++ b/assets/static/bootstrap-icons/chat-square-heart.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-square-quote-fill.svg b/assets/static/bootstrap-icons/chat-square-quote-fill.svg new file mode 100644 index 0000000..2496b70 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-square-quote-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-square-quote.svg b/assets/static/bootstrap-icons/chat-square-quote.svg new file mode 100644 index 0000000..a8f6b09 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-square-quote.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-square-text-fill.svg b/assets/static/bootstrap-icons/chat-square-text-fill.svg new file mode 100644 index 0000000..6ebf567 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-square-text-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-square-text.svg b/assets/static/bootstrap-icons/chat-square-text.svg new file mode 100644 index 0000000..1296f92 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-square-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-square.svg b/assets/static/bootstrap-icons/chat-square.svg new file mode 100644 index 0000000..4e13ae8 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-square.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-text-fill.svg b/assets/static/bootstrap-icons/chat-text-fill.svg new file mode 100644 index 0000000..93639f1 --- /dev/null +++ b/assets/static/bootstrap-icons/chat-text-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat-text.svg b/assets/static/bootstrap-icons/chat-text.svg new file mode 100644 index 0000000..f64f43f --- /dev/null +++ b/assets/static/bootstrap-icons/chat-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chat.svg b/assets/static/bootstrap-icons/chat.svg new file mode 100644 index 0000000..487d142 --- /dev/null +++ b/assets/static/bootstrap-icons/chat.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/check-all.svg b/assets/static/bootstrap-icons/check-all.svg new file mode 100644 index 0000000..f91fd77 --- /dev/null +++ b/assets/static/bootstrap-icons/check-all.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/check-circle-fill.svg b/assets/static/bootstrap-icons/check-circle-fill.svg new file mode 100644 index 0000000..0b7f412 --- /dev/null +++ b/assets/static/bootstrap-icons/check-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/check-circle.svg b/assets/static/bootstrap-icons/check-circle.svg new file mode 100644 index 0000000..016f607 --- /dev/null +++ b/assets/static/bootstrap-icons/check-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/check-lg.svg b/assets/static/bootstrap-icons/check-lg.svg new file mode 100644 index 0000000..63a8a3d --- /dev/null +++ b/assets/static/bootstrap-icons/check-lg.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/check-square-fill.svg b/assets/static/bootstrap-icons/check-square-fill.svg new file mode 100644 index 0000000..cbb56ed --- /dev/null +++ b/assets/static/bootstrap-icons/check-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/check-square.svg b/assets/static/bootstrap-icons/check-square.svg new file mode 100644 index 0000000..b7d1116 --- /dev/null +++ b/assets/static/bootstrap-icons/check-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/check.svg b/assets/static/bootstrap-icons/check.svg new file mode 100644 index 0000000..11ab547 --- /dev/null +++ b/assets/static/bootstrap-icons/check.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/check2-all.svg b/assets/static/bootstrap-icons/check2-all.svg new file mode 100644 index 0000000..cccc0b7 --- /dev/null +++ b/assets/static/bootstrap-icons/check2-all.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/check2-circle.svg b/assets/static/bootstrap-icons/check2-circle.svg new file mode 100644 index 0000000..166e661 --- /dev/null +++ b/assets/static/bootstrap-icons/check2-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/check2-square.svg b/assets/static/bootstrap-icons/check2-square.svg new file mode 100644 index 0000000..64c3669 --- /dev/null +++ b/assets/static/bootstrap-icons/check2-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/check2.svg b/assets/static/bootstrap-icons/check2.svg new file mode 100644 index 0000000..87168de --- /dev/null +++ b/assets/static/bootstrap-icons/check2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-bar-contract.svg b/assets/static/bootstrap-icons/chevron-bar-contract.svg new file mode 100644 index 0000000..52ec3f6 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-bar-contract.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-bar-down.svg b/assets/static/bootstrap-icons/chevron-bar-down.svg new file mode 100644 index 0000000..8c10216 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-bar-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-bar-expand.svg b/assets/static/bootstrap-icons/chevron-bar-expand.svg new file mode 100644 index 0000000..1260a20 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-bar-expand.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-bar-left.svg b/assets/static/bootstrap-icons/chevron-bar-left.svg new file mode 100644 index 0000000..36afeb7 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-bar-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-bar-right.svg b/assets/static/bootstrap-icons/chevron-bar-right.svg new file mode 100644 index 0000000..b71e040 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-bar-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-bar-up.svg b/assets/static/bootstrap-icons/chevron-bar-up.svg new file mode 100644 index 0000000..c5da175 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-bar-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-compact-down.svg b/assets/static/bootstrap-icons/chevron-compact-down.svg new file mode 100644 index 0000000..53d9d9a --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-compact-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-compact-left.svg b/assets/static/bootstrap-icons/chevron-compact-left.svg new file mode 100644 index 0000000..277ddd8 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-compact-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-compact-right.svg b/assets/static/bootstrap-icons/chevron-compact-right.svg new file mode 100644 index 0000000..24b5309 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-compact-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-compact-up.svg b/assets/static/bootstrap-icons/chevron-compact-up.svg new file mode 100644 index 0000000..2a4f354 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-compact-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-contract.svg b/assets/static/bootstrap-icons/chevron-contract.svg new file mode 100644 index 0000000..354ee86 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-contract.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-double-down.svg b/assets/static/bootstrap-icons/chevron-double-down.svg new file mode 100644 index 0000000..bc99e59 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-double-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-double-left.svg b/assets/static/bootstrap-icons/chevron-double-left.svg new file mode 100644 index 0000000..c4cd7f2 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-double-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-double-right.svg b/assets/static/bootstrap-icons/chevron-double-right.svg new file mode 100644 index 0000000..dccd6c5 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-double-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-double-up.svg b/assets/static/bootstrap-icons/chevron-double-up.svg new file mode 100644 index 0000000..ad7ba12 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-double-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-down.svg b/assets/static/bootstrap-icons/chevron-down.svg new file mode 100644 index 0000000..a281907 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-expand.svg b/assets/static/bootstrap-icons/chevron-expand.svg new file mode 100644 index 0000000..33e4ad8 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-expand.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-left.svg b/assets/static/bootstrap-icons/chevron-left.svg new file mode 100644 index 0000000..5bcc1bb --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-right.svg b/assets/static/bootstrap-icons/chevron-right.svg new file mode 100644 index 0000000..ab39af8 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/chevron-up.svg b/assets/static/bootstrap-icons/chevron-up.svg new file mode 100644 index 0000000..4f3c7a0 --- /dev/null +++ b/assets/static/bootstrap-icons/chevron-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/circle-fill.svg b/assets/static/bootstrap-icons/circle-fill.svg new file mode 100644 index 0000000..e0d1b51 --- /dev/null +++ b/assets/static/bootstrap-icons/circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/circle-half.svg b/assets/static/bootstrap-icons/circle-half.svg new file mode 100644 index 0000000..497f6b7 --- /dev/null +++ b/assets/static/bootstrap-icons/circle-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/circle-square.svg b/assets/static/bootstrap-icons/circle-square.svg new file mode 100644 index 0000000..c0f62b7 --- /dev/null +++ b/assets/static/bootstrap-icons/circle-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/circle.svg b/assets/static/bootstrap-icons/circle.svg new file mode 100644 index 0000000..9bbabca --- /dev/null +++ b/assets/static/bootstrap-icons/circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard-check-fill.svg b/assets/static/bootstrap-icons/clipboard-check-fill.svg new file mode 100644 index 0000000..598e850 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard-check-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard-check.svg b/assets/static/bootstrap-icons/clipboard-check.svg new file mode 100644 index 0000000..cb9d8a2 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard-check.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard-data-fill.svg b/assets/static/bootstrap-icons/clipboard-data-fill.svg new file mode 100644 index 0000000..e4a9425 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard-data-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard-data.svg b/assets/static/bootstrap-icons/clipboard-data.svg new file mode 100644 index 0000000..622acbf --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard-data.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard-fill.svg b/assets/static/bootstrap-icons/clipboard-fill.svg new file mode 100644 index 0000000..176c5e4 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard-heart-fill.svg b/assets/static/bootstrap-icons/clipboard-heart-fill.svg new file mode 100644 index 0000000..92de0a8 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard-heart-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard-heart.svg b/assets/static/bootstrap-icons/clipboard-heart.svg new file mode 100644 index 0000000..c430ed2 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard-heart.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard-minus-fill.svg b/assets/static/bootstrap-icons/clipboard-minus-fill.svg new file mode 100644 index 0000000..e47f43f --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard-minus-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard-minus.svg b/assets/static/bootstrap-icons/clipboard-minus.svg new file mode 100644 index 0000000..d3675c4 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard-minus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard-plus-fill.svg b/assets/static/bootstrap-icons/clipboard-plus-fill.svg new file mode 100644 index 0000000..8140aa8 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard-plus-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard-plus.svg b/assets/static/bootstrap-icons/clipboard-plus.svg new file mode 100644 index 0000000..1d095d7 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard-plus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard-pulse.svg b/assets/static/bootstrap-icons/clipboard-pulse.svg new file mode 100644 index 0000000..a357209 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard-pulse.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard-x-fill.svg b/assets/static/bootstrap-icons/clipboard-x-fill.svg new file mode 100644 index 0000000..10fba82 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard-x-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard-x.svg b/assets/static/bootstrap-icons/clipboard-x.svg new file mode 100644 index 0000000..46df235 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard-x.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard.svg b/assets/static/bootstrap-icons/clipboard.svg new file mode 100644 index 0000000..b92f42a --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-check-fill.svg b/assets/static/bootstrap-icons/clipboard2-check-fill.svg new file mode 100644 index 0000000..b640432 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-check-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-check.svg b/assets/static/bootstrap-icons/clipboard2-check.svg new file mode 100644 index 0000000..aba15bf --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-check.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-data-fill.svg b/assets/static/bootstrap-icons/clipboard2-data-fill.svg new file mode 100644 index 0000000..56c127e --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-data-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-data.svg b/assets/static/bootstrap-icons/clipboard2-data.svg new file mode 100644 index 0000000..75ac6c6 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-data.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-fill.svg b/assets/static/bootstrap-icons/clipboard2-fill.svg new file mode 100644 index 0000000..6898571 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-heart-fill.svg b/assets/static/bootstrap-icons/clipboard2-heart-fill.svg new file mode 100644 index 0000000..ce98945 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-heart-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-heart.svg b/assets/static/bootstrap-icons/clipboard2-heart.svg new file mode 100644 index 0000000..879fef2 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-heart.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-minus-fill.svg b/assets/static/bootstrap-icons/clipboard2-minus-fill.svg new file mode 100644 index 0000000..fcd4b56 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-minus-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-minus.svg b/assets/static/bootstrap-icons/clipboard2-minus.svg new file mode 100644 index 0000000..f8c10e3 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-minus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-plus-fill.svg b/assets/static/bootstrap-icons/clipboard2-plus-fill.svg new file mode 100644 index 0000000..be310e5 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-plus-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-plus.svg b/assets/static/bootstrap-icons/clipboard2-plus.svg new file mode 100644 index 0000000..33eaa28 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-plus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-pulse-fill.svg b/assets/static/bootstrap-icons/clipboard2-pulse-fill.svg new file mode 100644 index 0000000..bc7d6b3 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-pulse-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-pulse.svg b/assets/static/bootstrap-icons/clipboard2-pulse.svg new file mode 100644 index 0000000..c641c61 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-pulse.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-x-fill.svg b/assets/static/bootstrap-icons/clipboard2-x-fill.svg new file mode 100644 index 0000000..08828c6 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-x-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2-x.svg b/assets/static/bootstrap-icons/clipboard2-x.svg new file mode 100644 index 0000000..06832cc --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2-x.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clipboard2.svg b/assets/static/bootstrap-icons/clipboard2.svg new file mode 100644 index 0000000..d0f4529 --- /dev/null +++ b/assets/static/bootstrap-icons/clipboard2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clock-fill.svg b/assets/static/bootstrap-icons/clock-fill.svg new file mode 100644 index 0000000..148abcf --- /dev/null +++ b/assets/static/bootstrap-icons/clock-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clock-history.svg b/assets/static/bootstrap-icons/clock-history.svg new file mode 100644 index 0000000..f685e10 --- /dev/null +++ b/assets/static/bootstrap-icons/clock-history.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clock.svg b/assets/static/bootstrap-icons/clock.svg new file mode 100644 index 0000000..31c3c64 --- /dev/null +++ b/assets/static/bootstrap-icons/clock.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-arrow-down-fill.svg b/assets/static/bootstrap-icons/cloud-arrow-down-fill.svg new file mode 100644 index 0000000..1b23dc9 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-arrow-down-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-arrow-down.svg b/assets/static/bootstrap-icons/cloud-arrow-down.svg new file mode 100644 index 0000000..bb79bbe --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-arrow-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-arrow-up-fill.svg b/assets/static/bootstrap-icons/cloud-arrow-up-fill.svg new file mode 100644 index 0000000..8366f05 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-arrow-up-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-arrow-up.svg b/assets/static/bootstrap-icons/cloud-arrow-up.svg new file mode 100644 index 0000000..704756b --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-arrow-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-check-fill.svg b/assets/static/bootstrap-icons/cloud-check-fill.svg new file mode 100644 index 0000000..a71feee --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-check.svg b/assets/static/bootstrap-icons/cloud-check.svg new file mode 100644 index 0000000..d7599e9 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-download-fill.svg b/assets/static/bootstrap-icons/cloud-download-fill.svg new file mode 100644 index 0000000..c8a44ba --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-download-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-download.svg b/assets/static/bootstrap-icons/cloud-download.svg new file mode 100644 index 0000000..b71d7d7 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-download.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-drizzle-fill.svg b/assets/static/bootstrap-icons/cloud-drizzle-fill.svg new file mode 100644 index 0000000..0d381ae --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-drizzle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-drizzle.svg b/assets/static/bootstrap-icons/cloud-drizzle.svg new file mode 100644 index 0000000..f3c8599 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-drizzle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-fill.svg b/assets/static/bootstrap-icons/cloud-fill.svg new file mode 100644 index 0000000..8849faa --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-fog-fill.svg b/assets/static/bootstrap-icons/cloud-fog-fill.svg new file mode 100644 index 0000000..214caba --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-fog-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-fog.svg b/assets/static/bootstrap-icons/cloud-fog.svg new file mode 100644 index 0000000..26a574a --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-fog.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-fog2-fill.svg b/assets/static/bootstrap-icons/cloud-fog2-fill.svg new file mode 100644 index 0000000..8f67dea --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-fog2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-fog2.svg b/assets/static/bootstrap-icons/cloud-fog2.svg new file mode 100644 index 0000000..9b0664f --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-fog2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-hail-fill.svg b/assets/static/bootstrap-icons/cloud-hail-fill.svg new file mode 100644 index 0000000..0fa737f --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-hail-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-hail.svg b/assets/static/bootstrap-icons/cloud-hail.svg new file mode 100644 index 0000000..3206a02 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-hail.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-haze-fill.svg b/assets/static/bootstrap-icons/cloud-haze-fill.svg new file mode 100644 index 0000000..aa16c2c --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-haze-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-haze.svg b/assets/static/bootstrap-icons/cloud-haze.svg new file mode 100644 index 0000000..578a565 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-haze.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-haze2-fill.svg b/assets/static/bootstrap-icons/cloud-haze2-fill.svg new file mode 100644 index 0000000..3e22656 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-haze2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-haze2.svg b/assets/static/bootstrap-icons/cloud-haze2.svg new file mode 100644 index 0000000..c43d91c --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-haze2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-lightning-fill.svg b/assets/static/bootstrap-icons/cloud-lightning-fill.svg new file mode 100644 index 0000000..88fd930 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-lightning-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-lightning-rain-fill.svg b/assets/static/bootstrap-icons/cloud-lightning-rain-fill.svg new file mode 100644 index 0000000..f5cd845 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-lightning-rain-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-lightning-rain.svg b/assets/static/bootstrap-icons/cloud-lightning-rain.svg new file mode 100644 index 0000000..588b274 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-lightning-rain.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-lightning.svg b/assets/static/bootstrap-icons/cloud-lightning.svg new file mode 100644 index 0000000..20c2680 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-lightning.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-minus-fill.svg b/assets/static/bootstrap-icons/cloud-minus-fill.svg new file mode 100644 index 0000000..2fcc2bb --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-minus.svg b/assets/static/bootstrap-icons/cloud-minus.svg new file mode 100644 index 0000000..54f47b2 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-moon-fill.svg b/assets/static/bootstrap-icons/cloud-moon-fill.svg new file mode 100644 index 0000000..232dd4e --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-moon-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-moon.svg b/assets/static/bootstrap-icons/cloud-moon.svg new file mode 100644 index 0000000..cc91617 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-moon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-plus-fill.svg b/assets/static/bootstrap-icons/cloud-plus-fill.svg new file mode 100644 index 0000000..5337dc4 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-plus.svg b/assets/static/bootstrap-icons/cloud-plus.svg new file mode 100644 index 0000000..9448796 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-rain-fill.svg b/assets/static/bootstrap-icons/cloud-rain-fill.svg new file mode 100644 index 0000000..3ffee56 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-rain-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-rain-heavy-fill.svg b/assets/static/bootstrap-icons/cloud-rain-heavy-fill.svg new file mode 100644 index 0000000..d92411b --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-rain-heavy-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-rain-heavy.svg b/assets/static/bootstrap-icons/cloud-rain-heavy.svg new file mode 100644 index 0000000..ee9ef85 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-rain-heavy.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-rain.svg b/assets/static/bootstrap-icons/cloud-rain.svg new file mode 100644 index 0000000..e22f16c --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-rain.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-slash-fill.svg b/assets/static/bootstrap-icons/cloud-slash-fill.svg new file mode 100644 index 0000000..08a709b --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-slash-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-slash.svg b/assets/static/bootstrap-icons/cloud-slash.svg new file mode 100644 index 0000000..d7b680c --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-slash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-sleet-fill.svg b/assets/static/bootstrap-icons/cloud-sleet-fill.svg new file mode 100644 index 0000000..1df3f33 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-sleet-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-sleet.svg b/assets/static/bootstrap-icons/cloud-sleet.svg new file mode 100644 index 0000000..edc48c6 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-sleet.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-snow-fill.svg b/assets/static/bootstrap-icons/cloud-snow-fill.svg new file mode 100644 index 0000000..32cda8d --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-snow-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-snow.svg b/assets/static/bootstrap-icons/cloud-snow.svg new file mode 100644 index 0000000..26150c4 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-snow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-sun-fill.svg b/assets/static/bootstrap-icons/cloud-sun-fill.svg new file mode 100644 index 0000000..da5ecac --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-sun-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-sun.svg b/assets/static/bootstrap-icons/cloud-sun.svg new file mode 100644 index 0000000..caa95e9 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-sun.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-upload-fill.svg b/assets/static/bootstrap-icons/cloud-upload-fill.svg new file mode 100644 index 0000000..2d0df59 --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-upload-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud-upload.svg b/assets/static/bootstrap-icons/cloud-upload.svg new file mode 100644 index 0000000..e5ca56e --- /dev/null +++ b/assets/static/bootstrap-icons/cloud-upload.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloud.svg b/assets/static/bootstrap-icons/cloud.svg new file mode 100644 index 0000000..de877ab --- /dev/null +++ b/assets/static/bootstrap-icons/cloud.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clouds-fill.svg b/assets/static/bootstrap-icons/clouds-fill.svg new file mode 100644 index 0000000..d70e817 --- /dev/null +++ b/assets/static/bootstrap-icons/clouds-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/clouds.svg b/assets/static/bootstrap-icons/clouds.svg new file mode 100644 index 0000000..7e253e7 --- /dev/null +++ b/assets/static/bootstrap-icons/clouds.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloudy-fill.svg b/assets/static/bootstrap-icons/cloudy-fill.svg new file mode 100644 index 0000000..7bf27b7 --- /dev/null +++ b/assets/static/bootstrap-icons/cloudy-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cloudy.svg b/assets/static/bootstrap-icons/cloudy.svg new file mode 100644 index 0000000..87c2017 --- /dev/null +++ b/assets/static/bootstrap-icons/cloudy.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/code-slash.svg b/assets/static/bootstrap-icons/code-slash.svg new file mode 100644 index 0000000..51a5c57 --- /dev/null +++ b/assets/static/bootstrap-icons/code-slash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/code-square.svg b/assets/static/bootstrap-icons/code-square.svg new file mode 100644 index 0000000..30fdef3 --- /dev/null +++ b/assets/static/bootstrap-icons/code-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/code.svg b/assets/static/bootstrap-icons/code.svg new file mode 100644 index 0000000..c0760e9 --- /dev/null +++ b/assets/static/bootstrap-icons/code.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/coin.svg b/assets/static/bootstrap-icons/coin.svg new file mode 100644 index 0000000..fb94cc5 --- /dev/null +++ b/assets/static/bootstrap-icons/coin.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/collection-fill.svg b/assets/static/bootstrap-icons/collection-fill.svg new file mode 100644 index 0000000..4e5fbce --- /dev/null +++ b/assets/static/bootstrap-icons/collection-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/collection-play-fill.svg b/assets/static/bootstrap-icons/collection-play-fill.svg new file mode 100644 index 0000000..b6820d0 --- /dev/null +++ b/assets/static/bootstrap-icons/collection-play-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/collection-play.svg b/assets/static/bootstrap-icons/collection-play.svg new file mode 100644 index 0000000..0c59f5d --- /dev/null +++ b/assets/static/bootstrap-icons/collection-play.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/collection.svg b/assets/static/bootstrap-icons/collection.svg new file mode 100644 index 0000000..8b5d5fd --- /dev/null +++ b/assets/static/bootstrap-icons/collection.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/columns-gap.svg b/assets/static/bootstrap-icons/columns-gap.svg new file mode 100644 index 0000000..8b4bb4e --- /dev/null +++ b/assets/static/bootstrap-icons/columns-gap.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/columns.svg b/assets/static/bootstrap-icons/columns.svg new file mode 100644 index 0000000..17632df --- /dev/null +++ b/assets/static/bootstrap-icons/columns.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/command.svg b/assets/static/bootstrap-icons/command.svg new file mode 100644 index 0000000..64fa00b --- /dev/null +++ b/assets/static/bootstrap-icons/command.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/compass-fill.svg b/assets/static/bootstrap-icons/compass-fill.svg new file mode 100644 index 0000000..1396c1f --- /dev/null +++ b/assets/static/bootstrap-icons/compass-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/compass.svg b/assets/static/bootstrap-icons/compass.svg new file mode 100644 index 0000000..9b402f3 --- /dev/null +++ b/assets/static/bootstrap-icons/compass.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cone-striped.svg b/assets/static/bootstrap-icons/cone-striped.svg new file mode 100644 index 0000000..28a9529 --- /dev/null +++ b/assets/static/bootstrap-icons/cone-striped.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cone.svg b/assets/static/bootstrap-icons/cone.svg new file mode 100644 index 0000000..b1a7d97 --- /dev/null +++ b/assets/static/bootstrap-icons/cone.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/controller.svg b/assets/static/bootstrap-icons/controller.svg new file mode 100644 index 0000000..b7ceedb --- /dev/null +++ b/assets/static/bootstrap-icons/controller.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cookie.svg b/assets/static/bootstrap-icons/cookie.svg new file mode 100644 index 0000000..7a4b2fa --- /dev/null +++ b/assets/static/bootstrap-icons/cookie.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/copy.svg b/assets/static/bootstrap-icons/copy.svg new file mode 100644 index 0000000..b590680 --- /dev/null +++ b/assets/static/bootstrap-icons/copy.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cpu-fill.svg b/assets/static/bootstrap-icons/cpu-fill.svg new file mode 100644 index 0000000..ce6e294 --- /dev/null +++ b/assets/static/bootstrap-icons/cpu-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cpu.svg b/assets/static/bootstrap-icons/cpu.svg new file mode 100644 index 0000000..88c0d56 --- /dev/null +++ b/assets/static/bootstrap-icons/cpu.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/credit-card-2-back-fill.svg b/assets/static/bootstrap-icons/credit-card-2-back-fill.svg new file mode 100644 index 0000000..032fb4a --- /dev/null +++ b/assets/static/bootstrap-icons/credit-card-2-back-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/credit-card-2-back.svg b/assets/static/bootstrap-icons/credit-card-2-back.svg new file mode 100644 index 0000000..b29419c --- /dev/null +++ b/assets/static/bootstrap-icons/credit-card-2-back.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/credit-card-2-front-fill.svg b/assets/static/bootstrap-icons/credit-card-2-front-fill.svg new file mode 100644 index 0000000..06684d5 --- /dev/null +++ b/assets/static/bootstrap-icons/credit-card-2-front-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/credit-card-2-front.svg b/assets/static/bootstrap-icons/credit-card-2-front.svg new file mode 100644 index 0000000..0bbc290 --- /dev/null +++ b/assets/static/bootstrap-icons/credit-card-2-front.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/credit-card-fill.svg b/assets/static/bootstrap-icons/credit-card-fill.svg new file mode 100644 index 0000000..a4f899a --- /dev/null +++ b/assets/static/bootstrap-icons/credit-card-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/credit-card.svg b/assets/static/bootstrap-icons/credit-card.svg new file mode 100644 index 0000000..406233d --- /dev/null +++ b/assets/static/bootstrap-icons/credit-card.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/crop.svg b/assets/static/bootstrap-icons/crop.svg new file mode 100644 index 0000000..3b4bb60 --- /dev/null +++ b/assets/static/bootstrap-icons/crop.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/crosshair.svg b/assets/static/bootstrap-icons/crosshair.svg new file mode 100644 index 0000000..13bed74 --- /dev/null +++ b/assets/static/bootstrap-icons/crosshair.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/crosshair2.svg b/assets/static/bootstrap-icons/crosshair2.svg new file mode 100644 index 0000000..3c28586 --- /dev/null +++ b/assets/static/bootstrap-icons/crosshair2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cup-fill.svg b/assets/static/bootstrap-icons/cup-fill.svg new file mode 100644 index 0000000..7173787 --- /dev/null +++ b/assets/static/bootstrap-icons/cup-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cup-hot-fill.svg b/assets/static/bootstrap-icons/cup-hot-fill.svg new file mode 100644 index 0000000..9d7c465 --- /dev/null +++ b/assets/static/bootstrap-icons/cup-hot-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cup-hot.svg b/assets/static/bootstrap-icons/cup-hot.svg new file mode 100644 index 0000000..a6f7e89 --- /dev/null +++ b/assets/static/bootstrap-icons/cup-hot.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cup-straw.svg b/assets/static/bootstrap-icons/cup-straw.svg new file mode 100644 index 0000000..9388da9 --- /dev/null +++ b/assets/static/bootstrap-icons/cup-straw.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cup.svg b/assets/static/bootstrap-icons/cup.svg new file mode 100644 index 0000000..2694ac8 --- /dev/null +++ b/assets/static/bootstrap-icons/cup.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/currency-bitcoin.svg b/assets/static/bootstrap-icons/currency-bitcoin.svg new file mode 100644 index 0000000..0477ff8 --- /dev/null +++ b/assets/static/bootstrap-icons/currency-bitcoin.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/currency-dollar.svg b/assets/static/bootstrap-icons/currency-dollar.svg new file mode 100644 index 0000000..7ead9a7 --- /dev/null +++ b/assets/static/bootstrap-icons/currency-dollar.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/currency-euro.svg b/assets/static/bootstrap-icons/currency-euro.svg new file mode 100644 index 0000000..90c83d5 --- /dev/null +++ b/assets/static/bootstrap-icons/currency-euro.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/currency-exchange.svg b/assets/static/bootstrap-icons/currency-exchange.svg new file mode 100644 index 0000000..e332aa7 --- /dev/null +++ b/assets/static/bootstrap-icons/currency-exchange.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/currency-pound.svg b/assets/static/bootstrap-icons/currency-pound.svg new file mode 100644 index 0000000..4650876 --- /dev/null +++ b/assets/static/bootstrap-icons/currency-pound.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/currency-rupee.svg b/assets/static/bootstrap-icons/currency-rupee.svg new file mode 100644 index 0000000..4fdf9a2 --- /dev/null +++ b/assets/static/bootstrap-icons/currency-rupee.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/currency-yen.svg b/assets/static/bootstrap-icons/currency-yen.svg new file mode 100644 index 0000000..5bbf1a2 --- /dev/null +++ b/assets/static/bootstrap-icons/currency-yen.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cursor-fill.svg b/assets/static/bootstrap-icons/cursor-fill.svg new file mode 100644 index 0000000..093372b --- /dev/null +++ b/assets/static/bootstrap-icons/cursor-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cursor-text.svg b/assets/static/bootstrap-icons/cursor-text.svg new file mode 100644 index 0000000..27c057b --- /dev/null +++ b/assets/static/bootstrap-icons/cursor-text.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/cursor.svg b/assets/static/bootstrap-icons/cursor.svg new file mode 100644 index 0000000..e23e3fd --- /dev/null +++ b/assets/static/bootstrap-icons/cursor.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dash-circle-dotted.svg b/assets/static/bootstrap-icons/dash-circle-dotted.svg new file mode 100644 index 0000000..1c011e2 --- /dev/null +++ b/assets/static/bootstrap-icons/dash-circle-dotted.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dash-circle-fill.svg b/assets/static/bootstrap-icons/dash-circle-fill.svg new file mode 100644 index 0000000..ac4eae0 --- /dev/null +++ b/assets/static/bootstrap-icons/dash-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dash-circle.svg b/assets/static/bootstrap-icons/dash-circle.svg new file mode 100644 index 0000000..c4abdd2 --- /dev/null +++ b/assets/static/bootstrap-icons/dash-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dash-lg.svg b/assets/static/bootstrap-icons/dash-lg.svg new file mode 100644 index 0000000..454aa7d --- /dev/null +++ b/assets/static/bootstrap-icons/dash-lg.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dash-square-dotted.svg b/assets/static/bootstrap-icons/dash-square-dotted.svg new file mode 100644 index 0000000..90886c3 --- /dev/null +++ b/assets/static/bootstrap-icons/dash-square-dotted.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dash-square-fill.svg b/assets/static/bootstrap-icons/dash-square-fill.svg new file mode 100644 index 0000000..dbe0db2 --- /dev/null +++ b/assets/static/bootstrap-icons/dash-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dash-square.svg b/assets/static/bootstrap-icons/dash-square.svg new file mode 100644 index 0000000..9381872 --- /dev/null +++ b/assets/static/bootstrap-icons/dash-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dash.svg b/assets/static/bootstrap-icons/dash.svg new file mode 100644 index 0000000..c3834b4 --- /dev/null +++ b/assets/static/bootstrap-icons/dash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-add.svg b/assets/static/bootstrap-icons/database-add.svg new file mode 100644 index 0000000..5f76340 --- /dev/null +++ b/assets/static/bootstrap-icons/database-add.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-check.svg b/assets/static/bootstrap-icons/database-check.svg new file mode 100644 index 0000000..29c02b8 --- /dev/null +++ b/assets/static/bootstrap-icons/database-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-dash.svg b/assets/static/bootstrap-icons/database-dash.svg new file mode 100644 index 0000000..184db0a --- /dev/null +++ b/assets/static/bootstrap-icons/database-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-down.svg b/assets/static/bootstrap-icons/database-down.svg new file mode 100644 index 0000000..e077452 --- /dev/null +++ b/assets/static/bootstrap-icons/database-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-exclamation.svg b/assets/static/bootstrap-icons/database-exclamation.svg new file mode 100644 index 0000000..dbde50f --- /dev/null +++ b/assets/static/bootstrap-icons/database-exclamation.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-fill-add.svg b/assets/static/bootstrap-icons/database-fill-add.svg new file mode 100644 index 0000000..4273d5d --- /dev/null +++ b/assets/static/bootstrap-icons/database-fill-add.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-fill-check.svg b/assets/static/bootstrap-icons/database-fill-check.svg new file mode 100644 index 0000000..7690eed --- /dev/null +++ b/assets/static/bootstrap-icons/database-fill-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-fill-dash.svg b/assets/static/bootstrap-icons/database-fill-dash.svg new file mode 100644 index 0000000..48c468d --- /dev/null +++ b/assets/static/bootstrap-icons/database-fill-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-fill-down.svg b/assets/static/bootstrap-icons/database-fill-down.svg new file mode 100644 index 0000000..c3560d8 --- /dev/null +++ b/assets/static/bootstrap-icons/database-fill-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-fill-exclamation.svg b/assets/static/bootstrap-icons/database-fill-exclamation.svg new file mode 100644 index 0000000..00073d0 --- /dev/null +++ b/assets/static/bootstrap-icons/database-fill-exclamation.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-fill-gear.svg b/assets/static/bootstrap-icons/database-fill-gear.svg new file mode 100644 index 0000000..94fc2e6 --- /dev/null +++ b/assets/static/bootstrap-icons/database-fill-gear.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-fill-lock.svg b/assets/static/bootstrap-icons/database-fill-lock.svg new file mode 100644 index 0000000..a948205 --- /dev/null +++ b/assets/static/bootstrap-icons/database-fill-lock.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-fill-slash.svg b/assets/static/bootstrap-icons/database-fill-slash.svg new file mode 100644 index 0000000..467e6bb --- /dev/null +++ b/assets/static/bootstrap-icons/database-fill-slash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-fill-up.svg b/assets/static/bootstrap-icons/database-fill-up.svg new file mode 100644 index 0000000..07f2d39 --- /dev/null +++ b/assets/static/bootstrap-icons/database-fill-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-fill-x.svg b/assets/static/bootstrap-icons/database-fill-x.svg new file mode 100644 index 0000000..73ff269 --- /dev/null +++ b/assets/static/bootstrap-icons/database-fill-x.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-fill.svg b/assets/static/bootstrap-icons/database-fill.svg new file mode 100644 index 0000000..8603874 --- /dev/null +++ b/assets/static/bootstrap-icons/database-fill.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-gear.svg b/assets/static/bootstrap-icons/database-gear.svg new file mode 100644 index 0000000..451763c --- /dev/null +++ b/assets/static/bootstrap-icons/database-gear.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-lock.svg b/assets/static/bootstrap-icons/database-lock.svg new file mode 100644 index 0000000..e150cd2 --- /dev/null +++ b/assets/static/bootstrap-icons/database-lock.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-slash.svg b/assets/static/bootstrap-icons/database-slash.svg new file mode 100644 index 0000000..e0cc9f2 --- /dev/null +++ b/assets/static/bootstrap-icons/database-slash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-up.svg b/assets/static/bootstrap-icons/database-up.svg new file mode 100644 index 0000000..63f7a10 --- /dev/null +++ b/assets/static/bootstrap-icons/database-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database-x.svg b/assets/static/bootstrap-icons/database-x.svg new file mode 100644 index 0000000..f97779b --- /dev/null +++ b/assets/static/bootstrap-icons/database-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/database.svg b/assets/static/bootstrap-icons/database.svg new file mode 100644 index 0000000..231c50c --- /dev/null +++ b/assets/static/bootstrap-icons/database.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/device-hdd-fill.svg b/assets/static/bootstrap-icons/device-hdd-fill.svg new file mode 100644 index 0000000..d5380c0 --- /dev/null +++ b/assets/static/bootstrap-icons/device-hdd-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/device-hdd.svg b/assets/static/bootstrap-icons/device-hdd.svg new file mode 100644 index 0000000..5163a58 --- /dev/null +++ b/assets/static/bootstrap-icons/device-hdd.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/device-ssd-fill.svg b/assets/static/bootstrap-icons/device-ssd-fill.svg new file mode 100644 index 0000000..0d1f9c3 --- /dev/null +++ b/assets/static/bootstrap-icons/device-ssd-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/device-ssd.svg b/assets/static/bootstrap-icons/device-ssd.svg new file mode 100644 index 0000000..8405f21 --- /dev/null +++ b/assets/static/bootstrap-icons/device-ssd.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/diagram-2-fill.svg b/assets/static/bootstrap-icons/diagram-2-fill.svg new file mode 100644 index 0000000..397ae15 --- /dev/null +++ b/assets/static/bootstrap-icons/diagram-2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/diagram-2.svg b/assets/static/bootstrap-icons/diagram-2.svg new file mode 100644 index 0000000..a6e5439 --- /dev/null +++ b/assets/static/bootstrap-icons/diagram-2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/diagram-3-fill.svg b/assets/static/bootstrap-icons/diagram-3-fill.svg new file mode 100644 index 0000000..7e47423 --- /dev/null +++ b/assets/static/bootstrap-icons/diagram-3-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/diagram-3.svg b/assets/static/bootstrap-icons/diagram-3.svg new file mode 100644 index 0000000..ee3fd6f --- /dev/null +++ b/assets/static/bootstrap-icons/diagram-3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/diamond-fill.svg b/assets/static/bootstrap-icons/diamond-fill.svg new file mode 100644 index 0000000..1f86d1f --- /dev/null +++ b/assets/static/bootstrap-icons/diamond-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/diamond-half.svg b/assets/static/bootstrap-icons/diamond-half.svg new file mode 100644 index 0000000..68254b6 --- /dev/null +++ b/assets/static/bootstrap-icons/diamond-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/diamond.svg b/assets/static/bootstrap-icons/diamond.svg new file mode 100644 index 0000000..44e2855 --- /dev/null +++ b/assets/static/bootstrap-icons/diamond.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dice-1-fill.svg b/assets/static/bootstrap-icons/dice-1-fill.svg new file mode 100644 index 0000000..a32e2cf --- /dev/null +++ b/assets/static/bootstrap-icons/dice-1-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dice-1.svg b/assets/static/bootstrap-icons/dice-1.svg new file mode 100644 index 0000000..afc64b0 --- /dev/null +++ b/assets/static/bootstrap-icons/dice-1.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dice-2-fill.svg b/assets/static/bootstrap-icons/dice-2-fill.svg new file mode 100644 index 0000000..131013e --- /dev/null +++ b/assets/static/bootstrap-icons/dice-2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dice-2.svg b/assets/static/bootstrap-icons/dice-2.svg new file mode 100644 index 0000000..ba1a79c --- /dev/null +++ b/assets/static/bootstrap-icons/dice-2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dice-3-fill.svg b/assets/static/bootstrap-icons/dice-3-fill.svg new file mode 100644 index 0000000..158065d --- /dev/null +++ b/assets/static/bootstrap-icons/dice-3-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dice-3.svg b/assets/static/bootstrap-icons/dice-3.svg new file mode 100644 index 0000000..b64c675 --- /dev/null +++ b/assets/static/bootstrap-icons/dice-3.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dice-4-fill.svg b/assets/static/bootstrap-icons/dice-4-fill.svg new file mode 100644 index 0000000..7cf6e2c --- /dev/null +++ b/assets/static/bootstrap-icons/dice-4-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dice-4.svg b/assets/static/bootstrap-icons/dice-4.svg new file mode 100644 index 0000000..bd8bbf7 --- /dev/null +++ b/assets/static/bootstrap-icons/dice-4.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dice-5-fill.svg b/assets/static/bootstrap-icons/dice-5-fill.svg new file mode 100644 index 0000000..289cb45 --- /dev/null +++ b/assets/static/bootstrap-icons/dice-5-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dice-5.svg b/assets/static/bootstrap-icons/dice-5.svg new file mode 100644 index 0000000..cc96a35 --- /dev/null +++ b/assets/static/bootstrap-icons/dice-5.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dice-6-fill.svg b/assets/static/bootstrap-icons/dice-6-fill.svg new file mode 100644 index 0000000..9b3d652 --- /dev/null +++ b/assets/static/bootstrap-icons/dice-6-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dice-6.svg b/assets/static/bootstrap-icons/dice-6.svg new file mode 100644 index 0000000..47ba0aa --- /dev/null +++ b/assets/static/bootstrap-icons/dice-6.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/disc-fill.svg b/assets/static/bootstrap-icons/disc-fill.svg new file mode 100644 index 0000000..0d2d7f1 --- /dev/null +++ b/assets/static/bootstrap-icons/disc-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/disc.svg b/assets/static/bootstrap-icons/disc.svg new file mode 100644 index 0000000..360034c --- /dev/null +++ b/assets/static/bootstrap-icons/disc.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/discord.svg b/assets/static/bootstrap-icons/discord.svg new file mode 100644 index 0000000..9905364 --- /dev/null +++ b/assets/static/bootstrap-icons/discord.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/display-fill.svg b/assets/static/bootstrap-icons/display-fill.svg new file mode 100644 index 0000000..ed8e17e --- /dev/null +++ b/assets/static/bootstrap-icons/display-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/display.svg b/assets/static/bootstrap-icons/display.svg new file mode 100644 index 0000000..40a7d4d --- /dev/null +++ b/assets/static/bootstrap-icons/display.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/displayport-fill.svg b/assets/static/bootstrap-icons/displayport-fill.svg new file mode 100644 index 0000000..503a960 --- /dev/null +++ b/assets/static/bootstrap-icons/displayport-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/displayport.svg b/assets/static/bootstrap-icons/displayport.svg new file mode 100644 index 0000000..6b9e0bf --- /dev/null +++ b/assets/static/bootstrap-icons/displayport.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/distribute-horizontal.svg b/assets/static/bootstrap-icons/distribute-horizontal.svg new file mode 100644 index 0000000..3f7044f --- /dev/null +++ b/assets/static/bootstrap-icons/distribute-horizontal.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/distribute-vertical.svg b/assets/static/bootstrap-icons/distribute-vertical.svg new file mode 100644 index 0000000..cb77d1e --- /dev/null +++ b/assets/static/bootstrap-icons/distribute-vertical.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/door-closed-fill.svg b/assets/static/bootstrap-icons/door-closed-fill.svg new file mode 100644 index 0000000..1cad66b --- /dev/null +++ b/assets/static/bootstrap-icons/door-closed-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/door-closed.svg b/assets/static/bootstrap-icons/door-closed.svg new file mode 100644 index 0000000..e20b918 --- /dev/null +++ b/assets/static/bootstrap-icons/door-closed.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/door-open-fill.svg b/assets/static/bootstrap-icons/door-open-fill.svg new file mode 100644 index 0000000..38eaff0 --- /dev/null +++ b/assets/static/bootstrap-icons/door-open-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/door-open.svg b/assets/static/bootstrap-icons/door-open.svg new file mode 100644 index 0000000..328f353 --- /dev/null +++ b/assets/static/bootstrap-icons/door-open.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dot.svg b/assets/static/bootstrap-icons/dot.svg new file mode 100644 index 0000000..edc674e --- /dev/null +++ b/assets/static/bootstrap-icons/dot.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/download.svg b/assets/static/bootstrap-icons/download.svg new file mode 100644 index 0000000..90a34a3 --- /dev/null +++ b/assets/static/bootstrap-icons/download.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dpad-fill.svg b/assets/static/bootstrap-icons/dpad-fill.svg new file mode 100644 index 0000000..1c1153a --- /dev/null +++ b/assets/static/bootstrap-icons/dpad-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dpad.svg b/assets/static/bootstrap-icons/dpad.svg new file mode 100644 index 0000000..71ddb24 --- /dev/null +++ b/assets/static/bootstrap-icons/dpad.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dribbble.svg b/assets/static/bootstrap-icons/dribbble.svg new file mode 100644 index 0000000..725ff7f --- /dev/null +++ b/assets/static/bootstrap-icons/dribbble.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/dropbox.svg b/assets/static/bootstrap-icons/dropbox.svg new file mode 100644 index 0000000..d052f25 --- /dev/null +++ b/assets/static/bootstrap-icons/dropbox.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/droplet-fill.svg b/assets/static/bootstrap-icons/droplet-fill.svg new file mode 100644 index 0000000..85feddf --- /dev/null +++ b/assets/static/bootstrap-icons/droplet-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/droplet-half.svg b/assets/static/bootstrap-icons/droplet-half.svg new file mode 100644 index 0000000..bcd1c76 --- /dev/null +++ b/assets/static/bootstrap-icons/droplet-half.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/droplet.svg b/assets/static/bootstrap-icons/droplet.svg new file mode 100644 index 0000000..204ec67 --- /dev/null +++ b/assets/static/bootstrap-icons/droplet.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/duffle-fill.svg b/assets/static/bootstrap-icons/duffle-fill.svg new file mode 100644 index 0000000..885ee80 --- /dev/null +++ b/assets/static/bootstrap-icons/duffle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/duffle.svg b/assets/static/bootstrap-icons/duffle.svg new file mode 100644 index 0000000..1180de8 --- /dev/null +++ b/assets/static/bootstrap-icons/duffle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ear-fill.svg b/assets/static/bootstrap-icons/ear-fill.svg new file mode 100644 index 0000000..2d135d6 --- /dev/null +++ b/assets/static/bootstrap-icons/ear-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ear.svg b/assets/static/bootstrap-icons/ear.svg new file mode 100644 index 0000000..061fe2f --- /dev/null +++ b/assets/static/bootstrap-icons/ear.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/earbuds.svg b/assets/static/bootstrap-icons/earbuds.svg new file mode 100644 index 0000000..923bfca --- /dev/null +++ b/assets/static/bootstrap-icons/earbuds.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/easel-fill.svg b/assets/static/bootstrap-icons/easel-fill.svg new file mode 100644 index 0000000..8086507 --- /dev/null +++ b/assets/static/bootstrap-icons/easel-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/easel.svg b/assets/static/bootstrap-icons/easel.svg new file mode 100644 index 0000000..5c0f5a2 --- /dev/null +++ b/assets/static/bootstrap-icons/easel.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/easel2-fill.svg b/assets/static/bootstrap-icons/easel2-fill.svg new file mode 100644 index 0000000..309b438 --- /dev/null +++ b/assets/static/bootstrap-icons/easel2-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/easel2.svg b/assets/static/bootstrap-icons/easel2.svg new file mode 100644 index 0000000..74372fb --- /dev/null +++ b/assets/static/bootstrap-icons/easel2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/easel3-fill.svg b/assets/static/bootstrap-icons/easel3-fill.svg new file mode 100644 index 0000000..fc547ea --- /dev/null +++ b/assets/static/bootstrap-icons/easel3-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/easel3.svg b/assets/static/bootstrap-icons/easel3.svg new file mode 100644 index 0000000..f06a868 --- /dev/null +++ b/assets/static/bootstrap-icons/easel3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/egg-fill.svg b/assets/static/bootstrap-icons/egg-fill.svg new file mode 100644 index 0000000..b70cf16 --- /dev/null +++ b/assets/static/bootstrap-icons/egg-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/egg-fried.svg b/assets/static/bootstrap-icons/egg-fried.svg new file mode 100644 index 0000000..b0cefbc --- /dev/null +++ b/assets/static/bootstrap-icons/egg-fried.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/egg.svg b/assets/static/bootstrap-icons/egg.svg new file mode 100644 index 0000000..f23d8d4 --- /dev/null +++ b/assets/static/bootstrap-icons/egg.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/eject-fill.svg b/assets/static/bootstrap-icons/eject-fill.svg new file mode 100644 index 0000000..9604988 --- /dev/null +++ b/assets/static/bootstrap-icons/eject-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/eject.svg b/assets/static/bootstrap-icons/eject.svg new file mode 100644 index 0000000..71a3ab6 --- /dev/null +++ b/assets/static/bootstrap-icons/eject.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-angry-fill.svg b/assets/static/bootstrap-icons/emoji-angry-fill.svg new file mode 100644 index 0000000..d14d92d --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-angry-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-angry.svg b/assets/static/bootstrap-icons/emoji-angry.svg new file mode 100644 index 0000000..ee925fe --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-angry.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-astonished-fill.svg b/assets/static/bootstrap-icons/emoji-astonished-fill.svg new file mode 100644 index 0000000..22a566f --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-astonished-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-astonished.svg b/assets/static/bootstrap-icons/emoji-astonished.svg new file mode 100644 index 0000000..13f7cdd --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-astonished.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-dizzy-fill.svg b/assets/static/bootstrap-icons/emoji-dizzy-fill.svg new file mode 100644 index 0000000..98ab490 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-dizzy-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-dizzy.svg b/assets/static/bootstrap-icons/emoji-dizzy.svg new file mode 100644 index 0000000..fcef602 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-dizzy.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-expressionless-fill.svg b/assets/static/bootstrap-icons/emoji-expressionless-fill.svg new file mode 100644 index 0000000..17ac348 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-expressionless-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-expressionless.svg b/assets/static/bootstrap-icons/emoji-expressionless.svg new file mode 100644 index 0000000..8d7f68f --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-expressionless.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-frown-fill.svg b/assets/static/bootstrap-icons/emoji-frown-fill.svg new file mode 100644 index 0000000..7a16dfb --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-frown-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-frown.svg b/assets/static/bootstrap-icons/emoji-frown.svg new file mode 100644 index 0000000..696031b --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-frown.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-grimace-fill.svg b/assets/static/bootstrap-icons/emoji-grimace-fill.svg new file mode 100644 index 0000000..6cabf80 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-grimace-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-grimace.svg b/assets/static/bootstrap-icons/emoji-grimace.svg new file mode 100644 index 0000000..75a2a09 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-grimace.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-grin-fill.svg b/assets/static/bootstrap-icons/emoji-grin-fill.svg new file mode 100644 index 0000000..08c675e --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-grin-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-grin.svg b/assets/static/bootstrap-icons/emoji-grin.svg new file mode 100644 index 0000000..32bbf51 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-grin.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-heart-eyes-fill.svg b/assets/static/bootstrap-icons/emoji-heart-eyes-fill.svg new file mode 100644 index 0000000..d34f6e8 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-heart-eyes-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-heart-eyes.svg b/assets/static/bootstrap-icons/emoji-heart-eyes.svg new file mode 100644 index 0000000..5832822 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-heart-eyes.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-kiss-fill.svg b/assets/static/bootstrap-icons/emoji-kiss-fill.svg new file mode 100644 index 0000000..15a9cdd --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-kiss-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-kiss.svg b/assets/static/bootstrap-icons/emoji-kiss.svg new file mode 100644 index 0000000..2348d97 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-kiss.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-laughing-fill.svg b/assets/static/bootstrap-icons/emoji-laughing-fill.svg new file mode 100644 index 0000000..0130bf4 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-laughing-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-laughing.svg b/assets/static/bootstrap-icons/emoji-laughing.svg new file mode 100644 index 0000000..76b87f5 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-laughing.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-neutral-fill.svg b/assets/static/bootstrap-icons/emoji-neutral-fill.svg new file mode 100644 index 0000000..662603a --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-neutral-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-neutral.svg b/assets/static/bootstrap-icons/emoji-neutral.svg new file mode 100644 index 0000000..d6b60f8 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-neutral.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-smile-fill.svg b/assets/static/bootstrap-icons/emoji-smile-fill.svg new file mode 100644 index 0000000..439dff0 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-smile-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-smile-upside-down-fill.svg b/assets/static/bootstrap-icons/emoji-smile-upside-down-fill.svg new file mode 100644 index 0000000..2d6acca --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-smile-upside-down-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-smile-upside-down.svg b/assets/static/bootstrap-icons/emoji-smile-upside-down.svg new file mode 100644 index 0000000..d2d93ed --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-smile-upside-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-smile.svg b/assets/static/bootstrap-icons/emoji-smile.svg new file mode 100644 index 0000000..bba78da --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-smile.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-sunglasses-fill.svg b/assets/static/bootstrap-icons/emoji-sunglasses-fill.svg new file mode 100644 index 0000000..a1318c2 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-sunglasses-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-sunglasses.svg b/assets/static/bootstrap-icons/emoji-sunglasses.svg new file mode 100644 index 0000000..188b56c --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-sunglasses.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-surprise-fill.svg b/assets/static/bootstrap-icons/emoji-surprise-fill.svg new file mode 100644 index 0000000..9f6f620 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-surprise-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-surprise.svg b/assets/static/bootstrap-icons/emoji-surprise.svg new file mode 100644 index 0000000..af246bf --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-surprise.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-tear-fill.svg b/assets/static/bootstrap-icons/emoji-tear-fill.svg new file mode 100644 index 0000000..3ccf87d --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-tear-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-tear.svg b/assets/static/bootstrap-icons/emoji-tear.svg new file mode 100644 index 0000000..31b6597 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-tear.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-wink-fill.svg b/assets/static/bootstrap-icons/emoji-wink-fill.svg new file mode 100644 index 0000000..2f3e480 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-wink-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/emoji-wink.svg b/assets/static/bootstrap-icons/emoji-wink.svg new file mode 100644 index 0000000..7fe9116 --- /dev/null +++ b/assets/static/bootstrap-icons/emoji-wink.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-arrow-down-fill.svg b/assets/static/bootstrap-icons/envelope-arrow-down-fill.svg new file mode 100644 index 0000000..a5160e7 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-arrow-down-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-arrow-down.svg b/assets/static/bootstrap-icons/envelope-arrow-down.svg new file mode 100644 index 0000000..36b6f54 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-arrow-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-arrow-up-fill.svg b/assets/static/bootstrap-icons/envelope-arrow-up-fill.svg new file mode 100644 index 0000000..2757974 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-arrow-up-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-arrow-up.svg b/assets/static/bootstrap-icons/envelope-arrow-up.svg new file mode 100644 index 0000000..ff2fae0 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-arrow-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-at-fill.svg b/assets/static/bootstrap-icons/envelope-at-fill.svg new file mode 100644 index 0000000..e39ff38 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-at-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-at.svg b/assets/static/bootstrap-icons/envelope-at.svg new file mode 100644 index 0000000..163c3ba --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-at.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-check-fill.svg b/assets/static/bootstrap-icons/envelope-check-fill.svg new file mode 100644 index 0000000..26d753a --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-check-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-check.svg b/assets/static/bootstrap-icons/envelope-check.svg new file mode 100644 index 0000000..fbc765b --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-dash-fill.svg b/assets/static/bootstrap-icons/envelope-dash-fill.svg new file mode 100644 index 0000000..6e9e745 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-dash-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-dash.svg b/assets/static/bootstrap-icons/envelope-dash.svg new file mode 100644 index 0000000..d6457cf --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-exclamation-fill.svg b/assets/static/bootstrap-icons/envelope-exclamation-fill.svg new file mode 100644 index 0000000..e14f047 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-exclamation-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-exclamation.svg b/assets/static/bootstrap-icons/envelope-exclamation.svg new file mode 100644 index 0000000..4aca0a9 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-exclamation.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-fill.svg b/assets/static/bootstrap-icons/envelope-fill.svg new file mode 100644 index 0000000..966ef94 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-heart-fill.svg b/assets/static/bootstrap-icons/envelope-heart-fill.svg new file mode 100644 index 0000000..4158841 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-heart-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-heart.svg b/assets/static/bootstrap-icons/envelope-heart.svg new file mode 100644 index 0000000..c886df2 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-open-fill.svg b/assets/static/bootstrap-icons/envelope-open-fill.svg new file mode 100644 index 0000000..972d0e3 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-open-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-open-heart-fill.svg b/assets/static/bootstrap-icons/envelope-open-heart-fill.svg new file mode 100644 index 0000000..13263fa --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-open-heart-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-open-heart.svg b/assets/static/bootstrap-icons/envelope-open-heart.svg new file mode 100644 index 0000000..7018116 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-open-heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-open.svg b/assets/static/bootstrap-icons/envelope-open.svg new file mode 100644 index 0000000..3daa2eb --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-open.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-paper-fill.svg b/assets/static/bootstrap-icons/envelope-paper-fill.svg new file mode 100644 index 0000000..c8a187c --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-paper-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-paper-heart-fill.svg b/assets/static/bootstrap-icons/envelope-paper-heart-fill.svg new file mode 100644 index 0000000..7f58d57 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-paper-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-paper-heart.svg b/assets/static/bootstrap-icons/envelope-paper-heart.svg new file mode 100644 index 0000000..73b91d9 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-paper-heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-paper.svg b/assets/static/bootstrap-icons/envelope-paper.svg new file mode 100644 index 0000000..20fcc2a --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-paper.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-plus-fill.svg b/assets/static/bootstrap-icons/envelope-plus-fill.svg new file mode 100644 index 0000000..453a9fd --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-plus-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-plus.svg b/assets/static/bootstrap-icons/envelope-plus.svg new file mode 100644 index 0000000..7e960a0 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-slash-fill.svg b/assets/static/bootstrap-icons/envelope-slash-fill.svg new file mode 100644 index 0000000..90eb7ef --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-slash-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-slash.svg b/assets/static/bootstrap-icons/envelope-slash.svg new file mode 100644 index 0000000..65cb167 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-slash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-x-fill.svg b/assets/static/bootstrap-icons/envelope-x-fill.svg new file mode 100644 index 0000000..8f6a79c --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-x-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope-x.svg b/assets/static/bootstrap-icons/envelope-x.svg new file mode 100644 index 0000000..ea74027 --- /dev/null +++ b/assets/static/bootstrap-icons/envelope-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/envelope.svg b/assets/static/bootstrap-icons/envelope.svg new file mode 100644 index 0000000..78bf1de --- /dev/null +++ b/assets/static/bootstrap-icons/envelope.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/eraser-fill.svg b/assets/static/bootstrap-icons/eraser-fill.svg new file mode 100644 index 0000000..c3866e1 --- /dev/null +++ b/assets/static/bootstrap-icons/eraser-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/eraser.svg b/assets/static/bootstrap-icons/eraser.svg new file mode 100644 index 0000000..fe62336 --- /dev/null +++ b/assets/static/bootstrap-icons/eraser.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/escape.svg b/assets/static/bootstrap-icons/escape.svg new file mode 100644 index 0000000..66176b6 --- /dev/null +++ b/assets/static/bootstrap-icons/escape.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ethernet.svg b/assets/static/bootstrap-icons/ethernet.svg new file mode 100644 index 0000000..739a2de --- /dev/null +++ b/assets/static/bootstrap-icons/ethernet.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ev-front-fill.svg b/assets/static/bootstrap-icons/ev-front-fill.svg new file mode 100644 index 0000000..53b947d --- /dev/null +++ b/assets/static/bootstrap-icons/ev-front-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ev-front.svg b/assets/static/bootstrap-icons/ev-front.svg new file mode 100644 index 0000000..7f053a5 --- /dev/null +++ b/assets/static/bootstrap-icons/ev-front.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ev-station-fill.svg b/assets/static/bootstrap-icons/ev-station-fill.svg new file mode 100644 index 0000000..a1ad007 --- /dev/null +++ b/assets/static/bootstrap-icons/ev-station-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ev-station.svg b/assets/static/bootstrap-icons/ev-station.svg new file mode 100644 index 0000000..90470f6 --- /dev/null +++ b/assets/static/bootstrap-icons/ev-station.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/exclamation-circle-fill.svg b/assets/static/bootstrap-icons/exclamation-circle-fill.svg new file mode 100644 index 0000000..13ce7ab --- /dev/null +++ b/assets/static/bootstrap-icons/exclamation-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/exclamation-circle.svg b/assets/static/bootstrap-icons/exclamation-circle.svg new file mode 100644 index 0000000..f3befe0 --- /dev/null +++ b/assets/static/bootstrap-icons/exclamation-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/exclamation-diamond-fill.svg b/assets/static/bootstrap-icons/exclamation-diamond-fill.svg new file mode 100644 index 0000000..cb14aee --- /dev/null +++ b/assets/static/bootstrap-icons/exclamation-diamond-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/exclamation-diamond.svg b/assets/static/bootstrap-icons/exclamation-diamond.svg new file mode 100644 index 0000000..4881e6d --- /dev/null +++ b/assets/static/bootstrap-icons/exclamation-diamond.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/exclamation-lg.svg b/assets/static/bootstrap-icons/exclamation-lg.svg new file mode 100644 index 0000000..18f6a87 --- /dev/null +++ b/assets/static/bootstrap-icons/exclamation-lg.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/exclamation-octagon-fill.svg b/assets/static/bootstrap-icons/exclamation-octagon-fill.svg new file mode 100644 index 0000000..494010b --- /dev/null +++ b/assets/static/bootstrap-icons/exclamation-octagon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/exclamation-octagon.svg b/assets/static/bootstrap-icons/exclamation-octagon.svg new file mode 100644 index 0000000..7f25938 --- /dev/null +++ b/assets/static/bootstrap-icons/exclamation-octagon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/exclamation-square-fill.svg b/assets/static/bootstrap-icons/exclamation-square-fill.svg new file mode 100644 index 0000000..d80a4e9 --- /dev/null +++ b/assets/static/bootstrap-icons/exclamation-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/exclamation-square.svg b/assets/static/bootstrap-icons/exclamation-square.svg new file mode 100644 index 0000000..2a0f2ae --- /dev/null +++ b/assets/static/bootstrap-icons/exclamation-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/exclamation-triangle-fill.svg b/assets/static/bootstrap-icons/exclamation-triangle-fill.svg new file mode 100644 index 0000000..52fd508 --- /dev/null +++ b/assets/static/bootstrap-icons/exclamation-triangle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/exclamation-triangle.svg b/assets/static/bootstrap-icons/exclamation-triangle.svg new file mode 100644 index 0000000..506b777 --- /dev/null +++ b/assets/static/bootstrap-icons/exclamation-triangle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/exclamation.svg b/assets/static/bootstrap-icons/exclamation.svg new file mode 100644 index 0000000..d39cb95 --- /dev/null +++ b/assets/static/bootstrap-icons/exclamation.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/exclude.svg b/assets/static/bootstrap-icons/exclude.svg new file mode 100644 index 0000000..ef18355 --- /dev/null +++ b/assets/static/bootstrap-icons/exclude.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/explicit-fill.svg b/assets/static/bootstrap-icons/explicit-fill.svg new file mode 100644 index 0000000..c0cb6f0 --- /dev/null +++ b/assets/static/bootstrap-icons/explicit-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/explicit.svg b/assets/static/bootstrap-icons/explicit.svg new file mode 100644 index 0000000..a7ffae7 --- /dev/null +++ b/assets/static/bootstrap-icons/explicit.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/exposure.svg b/assets/static/bootstrap-icons/exposure.svg new file mode 100644 index 0000000..9de0e64 --- /dev/null +++ b/assets/static/bootstrap-icons/exposure.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/eye-fill.svg b/assets/static/bootstrap-icons/eye-fill.svg new file mode 100644 index 0000000..288d2eb --- /dev/null +++ b/assets/static/bootstrap-icons/eye-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/eye-slash-fill.svg b/assets/static/bootstrap-icons/eye-slash-fill.svg new file mode 100644 index 0000000..10cca74 --- /dev/null +++ b/assets/static/bootstrap-icons/eye-slash-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/eye-slash.svg b/assets/static/bootstrap-icons/eye-slash.svg new file mode 100644 index 0000000..359c270 --- /dev/null +++ b/assets/static/bootstrap-icons/eye-slash.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/eye.svg b/assets/static/bootstrap-icons/eye.svg new file mode 100644 index 0000000..393b485 --- /dev/null +++ b/assets/static/bootstrap-icons/eye.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/eyedropper.svg b/assets/static/bootstrap-icons/eyedropper.svg new file mode 100644 index 0000000..4579888 --- /dev/null +++ b/assets/static/bootstrap-icons/eyedropper.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/eyeglasses.svg b/assets/static/bootstrap-icons/eyeglasses.svg new file mode 100644 index 0000000..6b2eb97 --- /dev/null +++ b/assets/static/bootstrap-icons/eyeglasses.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/facebook.svg b/assets/static/bootstrap-icons/facebook.svg new file mode 100644 index 0000000..5fc7cec --- /dev/null +++ b/assets/static/bootstrap-icons/facebook.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fan.svg b/assets/static/bootstrap-icons/fan.svg new file mode 100644 index 0000000..ec8fe20 --- /dev/null +++ b/assets/static/bootstrap-icons/fan.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fast-forward-btn-fill.svg b/assets/static/bootstrap-icons/fast-forward-btn-fill.svg new file mode 100644 index 0000000..fd750fe --- /dev/null +++ b/assets/static/bootstrap-icons/fast-forward-btn-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fast-forward-btn.svg b/assets/static/bootstrap-icons/fast-forward-btn.svg new file mode 100644 index 0000000..5e68554 --- /dev/null +++ b/assets/static/bootstrap-icons/fast-forward-btn.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fast-forward-circle-fill.svg b/assets/static/bootstrap-icons/fast-forward-circle-fill.svg new file mode 100644 index 0000000..3946fa3 --- /dev/null +++ b/assets/static/bootstrap-icons/fast-forward-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fast-forward-circle.svg b/assets/static/bootstrap-icons/fast-forward-circle.svg new file mode 100644 index 0000000..e7f7158 --- /dev/null +++ b/assets/static/bootstrap-icons/fast-forward-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fast-forward-fill.svg b/assets/static/bootstrap-icons/fast-forward-fill.svg new file mode 100644 index 0000000..ae17a7e --- /dev/null +++ b/assets/static/bootstrap-icons/fast-forward-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fast-forward.svg b/assets/static/bootstrap-icons/fast-forward.svg new file mode 100644 index 0000000..2142979 --- /dev/null +++ b/assets/static/bootstrap-icons/fast-forward.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/feather.svg b/assets/static/bootstrap-icons/feather.svg new file mode 100644 index 0000000..f0462c2 --- /dev/null +++ b/assets/static/bootstrap-icons/feather.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/feather2.svg b/assets/static/bootstrap-icons/feather2.svg new file mode 100644 index 0000000..badc17a --- /dev/null +++ b/assets/static/bootstrap-icons/feather2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-arrow-down-fill.svg b/assets/static/bootstrap-icons/file-arrow-down-fill.svg new file mode 100644 index 0000000..5b5c552 --- /dev/null +++ b/assets/static/bootstrap-icons/file-arrow-down-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-arrow-down.svg b/assets/static/bootstrap-icons/file-arrow-down.svg new file mode 100644 index 0000000..f504b98 --- /dev/null +++ b/assets/static/bootstrap-icons/file-arrow-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-arrow-up-fill.svg b/assets/static/bootstrap-icons/file-arrow-up-fill.svg new file mode 100644 index 0000000..ef56199 --- /dev/null +++ b/assets/static/bootstrap-icons/file-arrow-up-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-arrow-up.svg b/assets/static/bootstrap-icons/file-arrow-up.svg new file mode 100644 index 0000000..9c88467 --- /dev/null +++ b/assets/static/bootstrap-icons/file-arrow-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-bar-graph-fill.svg b/assets/static/bootstrap-icons/file-bar-graph-fill.svg new file mode 100644 index 0000000..686b60b --- /dev/null +++ b/assets/static/bootstrap-icons/file-bar-graph-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-bar-graph.svg b/assets/static/bootstrap-icons/file-bar-graph.svg new file mode 100644 index 0000000..f953927 --- /dev/null +++ b/assets/static/bootstrap-icons/file-bar-graph.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-binary-fill.svg b/assets/static/bootstrap-icons/file-binary-fill.svg new file mode 100644 index 0000000..920c2a7 --- /dev/null +++ b/assets/static/bootstrap-icons/file-binary-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-binary.svg b/assets/static/bootstrap-icons/file-binary.svg new file mode 100644 index 0000000..0ecece7 --- /dev/null +++ b/assets/static/bootstrap-icons/file-binary.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-break-fill.svg b/assets/static/bootstrap-icons/file-break-fill.svg new file mode 100644 index 0000000..bdbe1b9 --- /dev/null +++ b/assets/static/bootstrap-icons/file-break-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-break.svg b/assets/static/bootstrap-icons/file-break.svg new file mode 100644 index 0000000..e94b3a3 --- /dev/null +++ b/assets/static/bootstrap-icons/file-break.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-check-fill.svg b/assets/static/bootstrap-icons/file-check-fill.svg new file mode 100644 index 0000000..cf165d3 --- /dev/null +++ b/assets/static/bootstrap-icons/file-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-check.svg b/assets/static/bootstrap-icons/file-check.svg new file mode 100644 index 0000000..10863e1 --- /dev/null +++ b/assets/static/bootstrap-icons/file-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-code-fill.svg b/assets/static/bootstrap-icons/file-code-fill.svg new file mode 100644 index 0000000..912ed0c --- /dev/null +++ b/assets/static/bootstrap-icons/file-code-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-code.svg b/assets/static/bootstrap-icons/file-code.svg new file mode 100644 index 0000000..58b0014 --- /dev/null +++ b/assets/static/bootstrap-icons/file-code.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-diff-fill.svg b/assets/static/bootstrap-icons/file-diff-fill.svg new file mode 100644 index 0000000..c108b87 --- /dev/null +++ b/assets/static/bootstrap-icons/file-diff-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-diff.svg b/assets/static/bootstrap-icons/file-diff.svg new file mode 100644 index 0000000..088c6de --- /dev/null +++ b/assets/static/bootstrap-icons/file-diff.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-arrow-down-fill.svg b/assets/static/bootstrap-icons/file-earmark-arrow-down-fill.svg new file mode 100644 index 0000000..3941f1f --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-arrow-down-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-arrow-down.svg b/assets/static/bootstrap-icons/file-earmark-arrow-down.svg new file mode 100644 index 0000000..37c4cd5 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-arrow-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-arrow-up-fill.svg b/assets/static/bootstrap-icons/file-earmark-arrow-up-fill.svg new file mode 100644 index 0000000..97a339d --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-arrow-up-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-arrow-up.svg b/assets/static/bootstrap-icons/file-earmark-arrow-up.svg new file mode 100644 index 0000000..1c827e9 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-arrow-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-bar-graph-fill.svg b/assets/static/bootstrap-icons/file-earmark-bar-graph-fill.svg new file mode 100644 index 0000000..a4c69b5 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-bar-graph-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-bar-graph.svg b/assets/static/bootstrap-icons/file-earmark-bar-graph.svg new file mode 100644 index 0000000..d367eca --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-bar-graph.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-binary-fill.svg b/assets/static/bootstrap-icons/file-earmark-binary-fill.svg new file mode 100644 index 0000000..a1f9933 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-binary-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-binary.svg b/assets/static/bootstrap-icons/file-earmark-binary.svg new file mode 100644 index 0000000..1528578 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-binary.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-break-fill.svg b/assets/static/bootstrap-icons/file-earmark-break-fill.svg new file mode 100644 index 0000000..e9aadce --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-break-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-break.svg b/assets/static/bootstrap-icons/file-earmark-break.svg new file mode 100644 index 0000000..4874715 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-break.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-check-fill.svg b/assets/static/bootstrap-icons/file-earmark-check-fill.svg new file mode 100644 index 0000000..f3e9eb3 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-check.svg b/assets/static/bootstrap-icons/file-earmark-check.svg new file mode 100644 index 0000000..dc36963 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-code-fill.svg b/assets/static/bootstrap-icons/file-earmark-code-fill.svg new file mode 100644 index 0000000..2c154fa --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-code-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-code.svg b/assets/static/bootstrap-icons/file-earmark-code.svg new file mode 100644 index 0000000..ccd3528 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-code.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-diff-fill.svg b/assets/static/bootstrap-icons/file-earmark-diff-fill.svg new file mode 100644 index 0000000..3b71e66 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-diff-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-diff.svg b/assets/static/bootstrap-icons/file-earmark-diff.svg new file mode 100644 index 0000000..97dfc0b --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-diff.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-easel-fill.svg b/assets/static/bootstrap-icons/file-earmark-easel-fill.svg new file mode 100644 index 0000000..e74c974 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-easel-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-easel.svg b/assets/static/bootstrap-icons/file-earmark-easel.svg new file mode 100644 index 0000000..2feeabc --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-easel.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-excel-fill.svg b/assets/static/bootstrap-icons/file-earmark-excel-fill.svg new file mode 100644 index 0000000..405a572 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-excel-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-excel.svg b/assets/static/bootstrap-icons/file-earmark-excel.svg new file mode 100644 index 0000000..5432bcf --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-excel.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-fill.svg b/assets/static/bootstrap-icons/file-earmark-fill.svg new file mode 100644 index 0000000..2f3ef6c --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-font-fill.svg b/assets/static/bootstrap-icons/file-earmark-font-fill.svg new file mode 100644 index 0000000..d3014bf --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-font-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-font.svg b/assets/static/bootstrap-icons/file-earmark-font.svg new file mode 100644 index 0000000..c9864cd --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-font.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-image-fill.svg b/assets/static/bootstrap-icons/file-earmark-image-fill.svg new file mode 100644 index 0000000..3ec76dc --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-image-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-image.svg b/assets/static/bootstrap-icons/file-earmark-image.svg new file mode 100644 index 0000000..1c3815d --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-image.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-lock-fill.svg b/assets/static/bootstrap-icons/file-earmark-lock-fill.svg new file mode 100644 index 0000000..4c45a61 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-lock-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-lock.svg b/assets/static/bootstrap-icons/file-earmark-lock.svg new file mode 100644 index 0000000..c8319a6 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-lock.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-lock2-fill.svg b/assets/static/bootstrap-icons/file-earmark-lock2-fill.svg new file mode 100644 index 0000000..76e8bd8 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-lock2-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-lock2.svg b/assets/static/bootstrap-icons/file-earmark-lock2.svg new file mode 100644 index 0000000..bd8f592 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-lock2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-medical-fill.svg b/assets/static/bootstrap-icons/file-earmark-medical-fill.svg new file mode 100644 index 0000000..42a0581 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-medical-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-medical.svg b/assets/static/bootstrap-icons/file-earmark-medical.svg new file mode 100644 index 0000000..e24c90c --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-medical.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-minus-fill.svg b/assets/static/bootstrap-icons/file-earmark-minus-fill.svg new file mode 100644 index 0000000..a5dca2d --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-minus.svg b/assets/static/bootstrap-icons/file-earmark-minus.svg new file mode 100644 index 0000000..cdc0026 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-music-fill.svg b/assets/static/bootstrap-icons/file-earmark-music-fill.svg new file mode 100644 index 0000000..b865e4e --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-music-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-music.svg b/assets/static/bootstrap-icons/file-earmark-music.svg new file mode 100644 index 0000000..e18ec85 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-music.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-pdf-fill.svg b/assets/static/bootstrap-icons/file-earmark-pdf-fill.svg new file mode 100644 index 0000000..219c5a3 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-pdf-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-pdf.svg b/assets/static/bootstrap-icons/file-earmark-pdf.svg new file mode 100644 index 0000000..51b9975 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-pdf.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-person-fill.svg b/assets/static/bootstrap-icons/file-earmark-person-fill.svg new file mode 100644 index 0000000..49ceda6 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-person-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-person.svg b/assets/static/bootstrap-icons/file-earmark-person.svg new file mode 100644 index 0000000..08a78cc --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-person.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-play-fill.svg b/assets/static/bootstrap-icons/file-earmark-play-fill.svg new file mode 100644 index 0000000..341eb37 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-play-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-play.svg b/assets/static/bootstrap-icons/file-earmark-play.svg new file mode 100644 index 0000000..abe215b --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-play.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-plus-fill.svg b/assets/static/bootstrap-icons/file-earmark-plus-fill.svg new file mode 100644 index 0000000..ef99c8a --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-plus.svg b/assets/static/bootstrap-icons/file-earmark-plus.svg new file mode 100644 index 0000000..964e855 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-post-fill.svg b/assets/static/bootstrap-icons/file-earmark-post-fill.svg new file mode 100644 index 0000000..548773f --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-post-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-post.svg b/assets/static/bootstrap-icons/file-earmark-post.svg new file mode 100644 index 0000000..d9f44a1 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-post.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-ppt-fill.svg b/assets/static/bootstrap-icons/file-earmark-ppt-fill.svg new file mode 100644 index 0000000..e96a461 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-ppt-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-ppt.svg b/assets/static/bootstrap-icons/file-earmark-ppt.svg new file mode 100644 index 0000000..cab71bc --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-ppt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-richtext-fill.svg b/assets/static/bootstrap-icons/file-earmark-richtext-fill.svg new file mode 100644 index 0000000..55da25c --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-richtext-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-richtext.svg b/assets/static/bootstrap-icons/file-earmark-richtext.svg new file mode 100644 index 0000000..3f3a6ad --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-richtext.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-ruled-fill.svg b/assets/static/bootstrap-icons/file-earmark-ruled-fill.svg new file mode 100644 index 0000000..ee90c80 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-ruled-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-ruled.svg b/assets/static/bootstrap-icons/file-earmark-ruled.svg new file mode 100644 index 0000000..ebd617e --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-ruled.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-slides-fill.svg b/assets/static/bootstrap-icons/file-earmark-slides-fill.svg new file mode 100644 index 0000000..e7f76f4 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-slides-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-slides.svg b/assets/static/bootstrap-icons/file-earmark-slides.svg new file mode 100644 index 0000000..e643cd3 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-slides.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-spreadsheet-fill.svg b/assets/static/bootstrap-icons/file-earmark-spreadsheet-fill.svg new file mode 100644 index 0000000..02ac9ec --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-spreadsheet-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-spreadsheet.svg b/assets/static/bootstrap-icons/file-earmark-spreadsheet.svg new file mode 100644 index 0000000..a6bb6e4 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-spreadsheet.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-text-fill.svg b/assets/static/bootstrap-icons/file-earmark-text-fill.svg new file mode 100644 index 0000000..bfedd6b --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-text-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-text.svg b/assets/static/bootstrap-icons/file-earmark-text.svg new file mode 100644 index 0000000..7ae53fc --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-word-fill.svg b/assets/static/bootstrap-icons/file-earmark-word-fill.svg new file mode 100644 index 0000000..259e767 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-word-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-word.svg b/assets/static/bootstrap-icons/file-earmark-word.svg new file mode 100644 index 0000000..ef4727c --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-word.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-x-fill.svg b/assets/static/bootstrap-icons/file-earmark-x-fill.svg new file mode 100644 index 0000000..f683966 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-x.svg b/assets/static/bootstrap-icons/file-earmark-x.svg new file mode 100644 index 0000000..4dd9da9 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-zip-fill.svg b/assets/static/bootstrap-icons/file-earmark-zip-fill.svg new file mode 100644 index 0000000..a17fa9e --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-zip-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark-zip.svg b/assets/static/bootstrap-icons/file-earmark-zip.svg new file mode 100644 index 0000000..f5f8ccc --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark-zip.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-earmark.svg b/assets/static/bootstrap-icons/file-earmark.svg new file mode 100644 index 0000000..d8d8774 --- /dev/null +++ b/assets/static/bootstrap-icons/file-earmark.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-easel-fill.svg b/assets/static/bootstrap-icons/file-easel-fill.svg new file mode 100644 index 0000000..fa9f915 --- /dev/null +++ b/assets/static/bootstrap-icons/file-easel-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-easel.svg b/assets/static/bootstrap-icons/file-easel.svg new file mode 100644 index 0000000..6366bc0 --- /dev/null +++ b/assets/static/bootstrap-icons/file-easel.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-excel-fill.svg b/assets/static/bootstrap-icons/file-excel-fill.svg new file mode 100644 index 0000000..bddcea2 --- /dev/null +++ b/assets/static/bootstrap-icons/file-excel-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-excel.svg b/assets/static/bootstrap-icons/file-excel.svg new file mode 100644 index 0000000..8bf2f5e --- /dev/null +++ b/assets/static/bootstrap-icons/file-excel.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-fill.svg b/assets/static/bootstrap-icons/file-fill.svg new file mode 100644 index 0000000..e5f8c4a --- /dev/null +++ b/assets/static/bootstrap-icons/file-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-font-fill.svg b/assets/static/bootstrap-icons/file-font-fill.svg new file mode 100644 index 0000000..6bda7b1 --- /dev/null +++ b/assets/static/bootstrap-icons/file-font-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-font.svg b/assets/static/bootstrap-icons/file-font.svg new file mode 100644 index 0000000..b75f9a4 --- /dev/null +++ b/assets/static/bootstrap-icons/file-font.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-image-fill.svg b/assets/static/bootstrap-icons/file-image-fill.svg new file mode 100644 index 0000000..7c73ece --- /dev/null +++ b/assets/static/bootstrap-icons/file-image-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-image.svg b/assets/static/bootstrap-icons/file-image.svg new file mode 100644 index 0000000..b063628 --- /dev/null +++ b/assets/static/bootstrap-icons/file-image.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-lock-fill.svg b/assets/static/bootstrap-icons/file-lock-fill.svg new file mode 100644 index 0000000..1f7c3f2 --- /dev/null +++ b/assets/static/bootstrap-icons/file-lock-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-lock.svg b/assets/static/bootstrap-icons/file-lock.svg new file mode 100644 index 0000000..195deef --- /dev/null +++ b/assets/static/bootstrap-icons/file-lock.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-lock2-fill.svg b/assets/static/bootstrap-icons/file-lock2-fill.svg new file mode 100644 index 0000000..82426e8 --- /dev/null +++ b/assets/static/bootstrap-icons/file-lock2-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-lock2.svg b/assets/static/bootstrap-icons/file-lock2.svg new file mode 100644 index 0000000..125a747 --- /dev/null +++ b/assets/static/bootstrap-icons/file-lock2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-medical-fill.svg b/assets/static/bootstrap-icons/file-medical-fill.svg new file mode 100644 index 0000000..2f4d3b2 --- /dev/null +++ b/assets/static/bootstrap-icons/file-medical-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-medical.svg b/assets/static/bootstrap-icons/file-medical.svg new file mode 100644 index 0000000..07e8495 --- /dev/null +++ b/assets/static/bootstrap-icons/file-medical.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-minus-fill.svg b/assets/static/bootstrap-icons/file-minus-fill.svg new file mode 100644 index 0000000..99f7d53 --- /dev/null +++ b/assets/static/bootstrap-icons/file-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-minus.svg b/assets/static/bootstrap-icons/file-minus.svg new file mode 100644 index 0000000..880409b --- /dev/null +++ b/assets/static/bootstrap-icons/file-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-music-fill.svg b/assets/static/bootstrap-icons/file-music-fill.svg new file mode 100644 index 0000000..38099f3 --- /dev/null +++ b/assets/static/bootstrap-icons/file-music-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-music.svg b/assets/static/bootstrap-icons/file-music.svg new file mode 100644 index 0000000..a24d41e --- /dev/null +++ b/assets/static/bootstrap-icons/file-music.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-pdf-fill.svg b/assets/static/bootstrap-icons/file-pdf-fill.svg new file mode 100644 index 0000000..c88d1b8 --- /dev/null +++ b/assets/static/bootstrap-icons/file-pdf-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-pdf.svg b/assets/static/bootstrap-icons/file-pdf.svg new file mode 100644 index 0000000..e7bdcba --- /dev/null +++ b/assets/static/bootstrap-icons/file-pdf.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-person-fill.svg b/assets/static/bootstrap-icons/file-person-fill.svg new file mode 100644 index 0000000..c212b00 --- /dev/null +++ b/assets/static/bootstrap-icons/file-person-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-person.svg b/assets/static/bootstrap-icons/file-person.svg new file mode 100644 index 0000000..e102abf --- /dev/null +++ b/assets/static/bootstrap-icons/file-person.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-play-fill.svg b/assets/static/bootstrap-icons/file-play-fill.svg new file mode 100644 index 0000000..a6dce8a --- /dev/null +++ b/assets/static/bootstrap-icons/file-play-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-play.svg b/assets/static/bootstrap-icons/file-play.svg new file mode 100644 index 0000000..d5505e3 --- /dev/null +++ b/assets/static/bootstrap-icons/file-play.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-plus-fill.svg b/assets/static/bootstrap-icons/file-plus-fill.svg new file mode 100644 index 0000000..bdb7ee0 --- /dev/null +++ b/assets/static/bootstrap-icons/file-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-plus.svg b/assets/static/bootstrap-icons/file-plus.svg new file mode 100644 index 0000000..af41ae1 --- /dev/null +++ b/assets/static/bootstrap-icons/file-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-post-fill.svg b/assets/static/bootstrap-icons/file-post-fill.svg new file mode 100644 index 0000000..336f219 --- /dev/null +++ b/assets/static/bootstrap-icons/file-post-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-post.svg b/assets/static/bootstrap-icons/file-post.svg new file mode 100644 index 0000000..6807724 --- /dev/null +++ b/assets/static/bootstrap-icons/file-post.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-ppt-fill.svg b/assets/static/bootstrap-icons/file-ppt-fill.svg new file mode 100644 index 0000000..b8c3973 --- /dev/null +++ b/assets/static/bootstrap-icons/file-ppt-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-ppt.svg b/assets/static/bootstrap-icons/file-ppt.svg new file mode 100644 index 0000000..bee27d4 --- /dev/null +++ b/assets/static/bootstrap-icons/file-ppt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-richtext-fill.svg b/assets/static/bootstrap-icons/file-richtext-fill.svg new file mode 100644 index 0000000..a98e5d7 --- /dev/null +++ b/assets/static/bootstrap-icons/file-richtext-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-richtext.svg b/assets/static/bootstrap-icons/file-richtext.svg new file mode 100644 index 0000000..3ceb420 --- /dev/null +++ b/assets/static/bootstrap-icons/file-richtext.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-ruled-fill.svg b/assets/static/bootstrap-icons/file-ruled-fill.svg new file mode 100644 index 0000000..8bfe726 --- /dev/null +++ b/assets/static/bootstrap-icons/file-ruled-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-ruled.svg b/assets/static/bootstrap-icons/file-ruled.svg new file mode 100644 index 0000000..7236cfc --- /dev/null +++ b/assets/static/bootstrap-icons/file-ruled.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-slides-fill.svg b/assets/static/bootstrap-icons/file-slides-fill.svg new file mode 100644 index 0000000..b75d3f7 --- /dev/null +++ b/assets/static/bootstrap-icons/file-slides-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-slides.svg b/assets/static/bootstrap-icons/file-slides.svg new file mode 100644 index 0000000..0e63548 --- /dev/null +++ b/assets/static/bootstrap-icons/file-slides.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-spreadsheet-fill.svg b/assets/static/bootstrap-icons/file-spreadsheet-fill.svg new file mode 100644 index 0000000..6db7eb6 --- /dev/null +++ b/assets/static/bootstrap-icons/file-spreadsheet-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-spreadsheet.svg b/assets/static/bootstrap-icons/file-spreadsheet.svg new file mode 100644 index 0000000..55b53ec --- /dev/null +++ b/assets/static/bootstrap-icons/file-spreadsheet.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-text-fill.svg b/assets/static/bootstrap-icons/file-text-fill.svg new file mode 100644 index 0000000..6da36b2 --- /dev/null +++ b/assets/static/bootstrap-icons/file-text-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-text.svg b/assets/static/bootstrap-icons/file-text.svg new file mode 100644 index 0000000..95dc704 --- /dev/null +++ b/assets/static/bootstrap-icons/file-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-word-fill.svg b/assets/static/bootstrap-icons/file-word-fill.svg new file mode 100644 index 0000000..6f578f0 --- /dev/null +++ b/assets/static/bootstrap-icons/file-word-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-word.svg b/assets/static/bootstrap-icons/file-word.svg new file mode 100644 index 0000000..732b59a --- /dev/null +++ b/assets/static/bootstrap-icons/file-word.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-x-fill.svg b/assets/static/bootstrap-icons/file-x-fill.svg new file mode 100644 index 0000000..0455659 --- /dev/null +++ b/assets/static/bootstrap-icons/file-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-x.svg b/assets/static/bootstrap-icons/file-x.svg new file mode 100644 index 0000000..5ab0b48 --- /dev/null +++ b/assets/static/bootstrap-icons/file-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-zip-fill.svg b/assets/static/bootstrap-icons/file-zip-fill.svg new file mode 100644 index 0000000..1d80366 --- /dev/null +++ b/assets/static/bootstrap-icons/file-zip-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file-zip.svg b/assets/static/bootstrap-icons/file-zip.svg new file mode 100644 index 0000000..e3b633e --- /dev/null +++ b/assets/static/bootstrap-icons/file-zip.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/file.svg b/assets/static/bootstrap-icons/file.svg new file mode 100644 index 0000000..4a5dd73 --- /dev/null +++ b/assets/static/bootstrap-icons/file.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/files-alt.svg b/assets/static/bootstrap-icons/files-alt.svg new file mode 100644 index 0000000..b42d764 --- /dev/null +++ b/assets/static/bootstrap-icons/files-alt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/files.svg b/assets/static/bootstrap-icons/files.svg new file mode 100644 index 0000000..6170ab5 --- /dev/null +++ b/assets/static/bootstrap-icons/files.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-aac.svg b/assets/static/bootstrap-icons/filetype-aac.svg new file mode 100644 index 0000000..b6a5c47 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-aac.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-ai.svg b/assets/static/bootstrap-icons/filetype-ai.svg new file mode 100644 index 0000000..fe2bcaa --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-ai.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-bmp.svg b/assets/static/bootstrap-icons/filetype-bmp.svg new file mode 100644 index 0000000..587381c --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-bmp.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-cs.svg b/assets/static/bootstrap-icons/filetype-cs.svg new file mode 100644 index 0000000..90ed8de --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-cs.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-css.svg b/assets/static/bootstrap-icons/filetype-css.svg new file mode 100644 index 0000000..8f0864f --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-css.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-csv.svg b/assets/static/bootstrap-icons/filetype-csv.svg new file mode 100644 index 0000000..fa097aa --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-csv.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-doc.svg b/assets/static/bootstrap-icons/filetype-doc.svg new file mode 100644 index 0000000..f75847f --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-doc.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-docx.svg b/assets/static/bootstrap-icons/filetype-docx.svg new file mode 100644 index 0000000..1b6c172 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-docx.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-exe.svg b/assets/static/bootstrap-icons/filetype-exe.svg new file mode 100644 index 0000000..cdafeb1 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-exe.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-gif.svg b/assets/static/bootstrap-icons/filetype-gif.svg new file mode 100644 index 0000000..b39234f --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-gif.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-heic.svg b/assets/static/bootstrap-icons/filetype-heic.svg new file mode 100644 index 0000000..a022060 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-heic.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-html.svg b/assets/static/bootstrap-icons/filetype-html.svg new file mode 100644 index 0000000..1661a94 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-html.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-java.svg b/assets/static/bootstrap-icons/filetype-java.svg new file mode 100644 index 0000000..eeeab41 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-java.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-jpg.svg b/assets/static/bootstrap-icons/filetype-jpg.svg new file mode 100644 index 0000000..7d939ec --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-jpg.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-js.svg b/assets/static/bootstrap-icons/filetype-js.svg new file mode 100644 index 0000000..4f4a00c --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-js.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-json.svg b/assets/static/bootstrap-icons/filetype-json.svg new file mode 100644 index 0000000..a4ccced --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-json.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-jsx.svg b/assets/static/bootstrap-icons/filetype-jsx.svg new file mode 100644 index 0000000..256b5c5 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-jsx.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-key.svg b/assets/static/bootstrap-icons/filetype-key.svg new file mode 100644 index 0000000..d164bc8 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-key.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-m4p.svg b/assets/static/bootstrap-icons/filetype-m4p.svg new file mode 100644 index 0000000..ae8f611 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-m4p.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-md.svg b/assets/static/bootstrap-icons/filetype-md.svg new file mode 100644 index 0000000..40e5139 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-md.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-mdx.svg b/assets/static/bootstrap-icons/filetype-mdx.svg new file mode 100644 index 0000000..43a9153 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-mdx.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-mov.svg b/assets/static/bootstrap-icons/filetype-mov.svg new file mode 100644 index 0000000..27e6391 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-mov.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-mp3.svg b/assets/static/bootstrap-icons/filetype-mp3.svg new file mode 100644 index 0000000..f25e6a8 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-mp3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-mp4.svg b/assets/static/bootstrap-icons/filetype-mp4.svg new file mode 100644 index 0000000..d27e9ff --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-mp4.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-otf.svg b/assets/static/bootstrap-icons/filetype-otf.svg new file mode 100644 index 0000000..f16eb61 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-otf.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-pdf.svg b/assets/static/bootstrap-icons/filetype-pdf.svg new file mode 100644 index 0000000..e8bb772 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-pdf.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-php.svg b/assets/static/bootstrap-icons/filetype-php.svg new file mode 100644 index 0000000..4d532df --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-php.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-png.svg b/assets/static/bootstrap-icons/filetype-png.svg new file mode 100644 index 0000000..659e266 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-png.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-ppt.svg b/assets/static/bootstrap-icons/filetype-ppt.svg new file mode 100644 index 0000000..e53b1ec --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-ppt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-pptx.svg b/assets/static/bootstrap-icons/filetype-pptx.svg new file mode 100644 index 0000000..f68e939 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-pptx.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-psd.svg b/assets/static/bootstrap-icons/filetype-psd.svg new file mode 100644 index 0000000..6fefd08 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-psd.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-py.svg b/assets/static/bootstrap-icons/filetype-py.svg new file mode 100644 index 0000000..14fd4ef --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-py.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-raw.svg b/assets/static/bootstrap-icons/filetype-raw.svg new file mode 100644 index 0000000..da98185 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-raw.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-rb.svg b/assets/static/bootstrap-icons/filetype-rb.svg new file mode 100644 index 0000000..3466a1f --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-rb.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-sass.svg b/assets/static/bootstrap-icons/filetype-sass.svg new file mode 100644 index 0000000..3632662 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-sass.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-scss.svg b/assets/static/bootstrap-icons/filetype-scss.svg new file mode 100644 index 0000000..8d1935f --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-scss.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-sh.svg b/assets/static/bootstrap-icons/filetype-sh.svg new file mode 100644 index 0000000..592c408 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-sh.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-sql.svg b/assets/static/bootstrap-icons/filetype-sql.svg new file mode 100644 index 0000000..814137d --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-sql.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-svg.svg b/assets/static/bootstrap-icons/filetype-svg.svg new file mode 100644 index 0000000..222d9ac --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-svg.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-tiff.svg b/assets/static/bootstrap-icons/filetype-tiff.svg new file mode 100644 index 0000000..e101575 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-tiff.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-tsx.svg b/assets/static/bootstrap-icons/filetype-tsx.svg new file mode 100644 index 0000000..73dd643 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-tsx.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-ttf.svg b/assets/static/bootstrap-icons/filetype-ttf.svg new file mode 100644 index 0000000..9c93584 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-ttf.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-txt.svg b/assets/static/bootstrap-icons/filetype-txt.svg new file mode 100644 index 0000000..1e27bcf --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-txt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-wav.svg b/assets/static/bootstrap-icons/filetype-wav.svg new file mode 100644 index 0000000..6725640 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-wav.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-woff.svg b/assets/static/bootstrap-icons/filetype-woff.svg new file mode 100644 index 0000000..f29a4b1 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-woff.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-xls.svg b/assets/static/bootstrap-icons/filetype-xls.svg new file mode 100644 index 0000000..5f79b16 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-xls.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-xlsx.svg b/assets/static/bootstrap-icons/filetype-xlsx.svg new file mode 100644 index 0000000..5202bf7 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-xlsx.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-xml.svg b/assets/static/bootstrap-icons/filetype-xml.svg new file mode 100644 index 0000000..ba9ffb6 --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-xml.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filetype-yml.svg b/assets/static/bootstrap-icons/filetype-yml.svg new file mode 100644 index 0000000..17a9ebe --- /dev/null +++ b/assets/static/bootstrap-icons/filetype-yml.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/film.svg b/assets/static/bootstrap-icons/film.svg new file mode 100644 index 0000000..40c2eb9 --- /dev/null +++ b/assets/static/bootstrap-icons/film.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filter-circle-fill.svg b/assets/static/bootstrap-icons/filter-circle-fill.svg new file mode 100644 index 0000000..1aa0f39 --- /dev/null +++ b/assets/static/bootstrap-icons/filter-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filter-circle.svg b/assets/static/bootstrap-icons/filter-circle.svg new file mode 100644 index 0000000..42c1b84 --- /dev/null +++ b/assets/static/bootstrap-icons/filter-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filter-left.svg b/assets/static/bootstrap-icons/filter-left.svg new file mode 100644 index 0000000..bb1ee92 --- /dev/null +++ b/assets/static/bootstrap-icons/filter-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filter-right.svg b/assets/static/bootstrap-icons/filter-right.svg new file mode 100644 index 0000000..6a5083c --- /dev/null +++ b/assets/static/bootstrap-icons/filter-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filter-square-fill.svg b/assets/static/bootstrap-icons/filter-square-fill.svg new file mode 100644 index 0000000..438b8c2 --- /dev/null +++ b/assets/static/bootstrap-icons/filter-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filter-square.svg b/assets/static/bootstrap-icons/filter-square.svg new file mode 100644 index 0000000..d243b0b --- /dev/null +++ b/assets/static/bootstrap-icons/filter-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/filter.svg b/assets/static/bootstrap-icons/filter.svg new file mode 100644 index 0000000..a7d7dac --- /dev/null +++ b/assets/static/bootstrap-icons/filter.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fingerprint.svg b/assets/static/bootstrap-icons/fingerprint.svg new file mode 100644 index 0000000..08252bb --- /dev/null +++ b/assets/static/bootstrap-icons/fingerprint.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fire.svg b/assets/static/bootstrap-icons/fire.svg new file mode 100644 index 0000000..a58e6dd --- /dev/null +++ b/assets/static/bootstrap-icons/fire.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/flag-fill.svg b/assets/static/bootstrap-icons/flag-fill.svg new file mode 100644 index 0000000..8b92331 --- /dev/null +++ b/assets/static/bootstrap-icons/flag-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/flag.svg b/assets/static/bootstrap-icons/flag.svg new file mode 100644 index 0000000..f8b6dab --- /dev/null +++ b/assets/static/bootstrap-icons/flag.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/floppy-fill.svg b/assets/static/bootstrap-icons/floppy-fill.svg new file mode 100644 index 0000000..87a43ce --- /dev/null +++ b/assets/static/bootstrap-icons/floppy-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/floppy.svg b/assets/static/bootstrap-icons/floppy.svg new file mode 100644 index 0000000..65ae562 --- /dev/null +++ b/assets/static/bootstrap-icons/floppy.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/floppy2-fill.svg b/assets/static/bootstrap-icons/floppy2-fill.svg new file mode 100644 index 0000000..61a6cdb --- /dev/null +++ b/assets/static/bootstrap-icons/floppy2-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/floppy2.svg b/assets/static/bootstrap-icons/floppy2.svg new file mode 100644 index 0000000..2412389 --- /dev/null +++ b/assets/static/bootstrap-icons/floppy2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/flower1.svg b/assets/static/bootstrap-icons/flower1.svg new file mode 100644 index 0000000..3495858 --- /dev/null +++ b/assets/static/bootstrap-icons/flower1.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/flower2.svg b/assets/static/bootstrap-icons/flower2.svg new file mode 100644 index 0000000..664a9c2 --- /dev/null +++ b/assets/static/bootstrap-icons/flower2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/flower3.svg b/assets/static/bootstrap-icons/flower3.svg new file mode 100644 index 0000000..66845c3 --- /dev/null +++ b/assets/static/bootstrap-icons/flower3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/folder-check.svg b/assets/static/bootstrap-icons/folder-check.svg new file mode 100644 index 0000000..57c6466 --- /dev/null +++ b/assets/static/bootstrap-icons/folder-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/folder-fill.svg b/assets/static/bootstrap-icons/folder-fill.svg new file mode 100644 index 0000000..113350c --- /dev/null +++ b/assets/static/bootstrap-icons/folder-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/folder-minus.svg b/assets/static/bootstrap-icons/folder-minus.svg new file mode 100644 index 0000000..41db30b --- /dev/null +++ b/assets/static/bootstrap-icons/folder-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/folder-plus.svg b/assets/static/bootstrap-icons/folder-plus.svg new file mode 100644 index 0000000..85b5a18 --- /dev/null +++ b/assets/static/bootstrap-icons/folder-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/folder-symlink-fill.svg b/assets/static/bootstrap-icons/folder-symlink-fill.svg new file mode 100644 index 0000000..6407400 --- /dev/null +++ b/assets/static/bootstrap-icons/folder-symlink-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/folder-symlink.svg b/assets/static/bootstrap-icons/folder-symlink.svg new file mode 100644 index 0000000..7137637 --- /dev/null +++ b/assets/static/bootstrap-icons/folder-symlink.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/folder-x.svg b/assets/static/bootstrap-icons/folder-x.svg new file mode 100644 index 0000000..a6ed341 --- /dev/null +++ b/assets/static/bootstrap-icons/folder-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/folder.svg b/assets/static/bootstrap-icons/folder.svg new file mode 100644 index 0000000..a30c452 --- /dev/null +++ b/assets/static/bootstrap-icons/folder.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/folder2-open.svg b/assets/static/bootstrap-icons/folder2-open.svg new file mode 100644 index 0000000..7ffbb54 --- /dev/null +++ b/assets/static/bootstrap-icons/folder2-open.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/folder2.svg b/assets/static/bootstrap-icons/folder2.svg new file mode 100644 index 0000000..ce6a1af --- /dev/null +++ b/assets/static/bootstrap-icons/folder2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/font/bootstrap-icons.css b/assets/static/bootstrap-icons/font/bootstrap-icons.css new file mode 100644 index 0000000..bc84a5f --- /dev/null +++ b/assets/static/bootstrap-icons/font/bootstrap-icons.css @@ -0,0 +1,2078 @@ +/*! + * Bootstrap Icons v1.11.3 (https://icons.getbootstrap.com/) + * Copyright 2019-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE) + */ + +@font-face { + font-display: block; + font-family: "bootstrap-icons"; + src: url("./fonts/bootstrap-icons.woff2?dd67030699838ea613ee6dbda90effa6") format("woff2"), +url("./fonts/bootstrap-icons.woff?dd67030699838ea613ee6dbda90effa6") format("woff"); +} + +.bi::before, +[class^="bi-"]::before, +[class*=" bi-"]::before { + display: inline-block; + font-family: bootstrap-icons !important; + font-style: normal; + font-weight: normal !important; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: -.125em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +.bi-123::before { content: "\f67f"; } +.bi-alarm-fill::before { content: "\f101"; } +.bi-alarm::before { content: "\f102"; } +.bi-align-bottom::before { content: "\f103"; } +.bi-align-center::before { content: "\f104"; } +.bi-align-end::before { content: "\f105"; } +.bi-align-middle::before { content: "\f106"; } +.bi-align-start::before { content: "\f107"; } +.bi-align-top::before { content: "\f108"; } +.bi-alt::before { content: "\f109"; } +.bi-app-indicator::before { content: "\f10a"; } +.bi-app::before { content: "\f10b"; } +.bi-archive-fill::before { content: "\f10c"; } +.bi-archive::before { content: "\f10d"; } +.bi-arrow-90deg-down::before { content: "\f10e"; } +.bi-arrow-90deg-left::before { content: "\f10f"; } +.bi-arrow-90deg-right::before { content: "\f110"; } +.bi-arrow-90deg-up::before { content: "\f111"; } +.bi-arrow-bar-down::before { content: "\f112"; } +.bi-arrow-bar-left::before { content: "\f113"; } +.bi-arrow-bar-right::before { content: "\f114"; } +.bi-arrow-bar-up::before { content: "\f115"; } +.bi-arrow-clockwise::before { content: "\f116"; } +.bi-arrow-counterclockwise::before { content: "\f117"; } +.bi-arrow-down-circle-fill::before { content: "\f118"; } +.bi-arrow-down-circle::before { content: "\f119"; } +.bi-arrow-down-left-circle-fill::before { content: "\f11a"; } +.bi-arrow-down-left-circle::before { content: "\f11b"; } +.bi-arrow-down-left-square-fill::before { content: "\f11c"; } +.bi-arrow-down-left-square::before { content: "\f11d"; } +.bi-arrow-down-left::before { content: "\f11e"; } +.bi-arrow-down-right-circle-fill::before { content: "\f11f"; } +.bi-arrow-down-right-circle::before { content: "\f120"; } +.bi-arrow-down-right-square-fill::before { content: "\f121"; } +.bi-arrow-down-right-square::before { content: "\f122"; } +.bi-arrow-down-right::before { content: "\f123"; } +.bi-arrow-down-short::before { content: "\f124"; } +.bi-arrow-down-square-fill::before { content: "\f125"; } +.bi-arrow-down-square::before { content: "\f126"; } +.bi-arrow-down-up::before { content: "\f127"; } +.bi-arrow-down::before { content: "\f128"; } +.bi-arrow-left-circle-fill::before { content: "\f129"; } +.bi-arrow-left-circle::before { content: "\f12a"; } +.bi-arrow-left-right::before { content: "\f12b"; } +.bi-arrow-left-short::before { content: "\f12c"; } +.bi-arrow-left-square-fill::before { content: "\f12d"; } +.bi-arrow-left-square::before { content: "\f12e"; } +.bi-arrow-left::before { content: "\f12f"; } +.bi-arrow-repeat::before { content: "\f130"; } +.bi-arrow-return-left::before { content: "\f131"; } +.bi-arrow-return-right::before { content: "\f132"; } +.bi-arrow-right-circle-fill::before { content: "\f133"; } +.bi-arrow-right-circle::before { content: "\f134"; } +.bi-arrow-right-short::before { content: "\f135"; } +.bi-arrow-right-square-fill::before { content: "\f136"; } +.bi-arrow-right-square::before { content: "\f137"; } +.bi-arrow-right::before { content: "\f138"; } +.bi-arrow-up-circle-fill::before { content: "\f139"; } +.bi-arrow-up-circle::before { content: "\f13a"; } +.bi-arrow-up-left-circle-fill::before { content: "\f13b"; } +.bi-arrow-up-left-circle::before { content: "\f13c"; } +.bi-arrow-up-left-square-fill::before { content: "\f13d"; } +.bi-arrow-up-left-square::before { content: "\f13e"; } +.bi-arrow-up-left::before { content: "\f13f"; } +.bi-arrow-up-right-circle-fill::before { content: "\f140"; } +.bi-arrow-up-right-circle::before { content: "\f141"; } +.bi-arrow-up-right-square-fill::before { content: "\f142"; } +.bi-arrow-up-right-square::before { content: "\f143"; } +.bi-arrow-up-right::before { content: "\f144"; } +.bi-arrow-up-short::before { content: "\f145"; } +.bi-arrow-up-square-fill::before { content: "\f146"; } +.bi-arrow-up-square::before { content: "\f147"; } +.bi-arrow-up::before { content: "\f148"; } +.bi-arrows-angle-contract::before { content: "\f149"; } +.bi-arrows-angle-expand::before { content: "\f14a"; } +.bi-arrows-collapse::before { content: "\f14b"; } +.bi-arrows-expand::before { content: "\f14c"; } +.bi-arrows-fullscreen::before { content: "\f14d"; } +.bi-arrows-move::before { content: "\f14e"; } +.bi-aspect-ratio-fill::before { content: "\f14f"; } +.bi-aspect-ratio::before { content: "\f150"; } +.bi-asterisk::before { content: "\f151"; } +.bi-at::before { content: "\f152"; } +.bi-award-fill::before { content: "\f153"; } +.bi-award::before { content: "\f154"; } +.bi-back::before { content: "\f155"; } +.bi-backspace-fill::before { content: "\f156"; } +.bi-backspace-reverse-fill::before { content: "\f157"; } +.bi-backspace-reverse::before { content: "\f158"; } +.bi-backspace::before { content: "\f159"; } +.bi-badge-3d-fill::before { content: "\f15a"; } +.bi-badge-3d::before { content: "\f15b"; } +.bi-badge-4k-fill::before { content: "\f15c"; } +.bi-badge-4k::before { content: "\f15d"; } +.bi-badge-8k-fill::before { content: "\f15e"; } +.bi-badge-8k::before { content: "\f15f"; } +.bi-badge-ad-fill::before { content: "\f160"; } +.bi-badge-ad::before { content: "\f161"; } +.bi-badge-ar-fill::before { content: "\f162"; } +.bi-badge-ar::before { content: "\f163"; } +.bi-badge-cc-fill::before { content: "\f164"; } +.bi-badge-cc::before { content: "\f165"; } +.bi-badge-hd-fill::before { content: "\f166"; } +.bi-badge-hd::before { content: "\f167"; } +.bi-badge-tm-fill::before { content: "\f168"; } +.bi-badge-tm::before { content: "\f169"; } +.bi-badge-vo-fill::before { content: "\f16a"; } +.bi-badge-vo::before { content: "\f16b"; } +.bi-badge-vr-fill::before { content: "\f16c"; } +.bi-badge-vr::before { content: "\f16d"; } +.bi-badge-wc-fill::before { content: "\f16e"; } +.bi-badge-wc::before { content: "\f16f"; } +.bi-bag-check-fill::before { content: "\f170"; } +.bi-bag-check::before { content: "\f171"; } +.bi-bag-dash-fill::before { content: "\f172"; } +.bi-bag-dash::before { content: "\f173"; } +.bi-bag-fill::before { content: "\f174"; } +.bi-bag-plus-fill::before { content: "\f175"; } +.bi-bag-plus::before { content: "\f176"; } +.bi-bag-x-fill::before { content: "\f177"; } +.bi-bag-x::before { content: "\f178"; } +.bi-bag::before { content: "\f179"; } +.bi-bar-chart-fill::before { content: "\f17a"; } +.bi-bar-chart-line-fill::before { content: "\f17b"; } +.bi-bar-chart-line::before { content: "\f17c"; } +.bi-bar-chart-steps::before { content: "\f17d"; } +.bi-bar-chart::before { content: "\f17e"; } +.bi-basket-fill::before { content: "\f17f"; } +.bi-basket::before { content: "\f180"; } +.bi-basket2-fill::before { content: "\f181"; } +.bi-basket2::before { content: "\f182"; } +.bi-basket3-fill::before { content: "\f183"; } +.bi-basket3::before { content: "\f184"; } +.bi-battery-charging::before { content: "\f185"; } +.bi-battery-full::before { content: "\f186"; } +.bi-battery-half::before { content: "\f187"; } +.bi-battery::before { content: "\f188"; } +.bi-bell-fill::before { content: "\f189"; } +.bi-bell::before { content: "\f18a"; } +.bi-bezier::before { content: "\f18b"; } +.bi-bezier2::before { content: "\f18c"; } +.bi-bicycle::before { content: "\f18d"; } +.bi-binoculars-fill::before { content: "\f18e"; } +.bi-binoculars::before { content: "\f18f"; } +.bi-blockquote-left::before { content: "\f190"; } +.bi-blockquote-right::before { content: "\f191"; } +.bi-book-fill::before { content: "\f192"; } +.bi-book-half::before { content: "\f193"; } +.bi-book::before { content: "\f194"; } +.bi-bookmark-check-fill::before { content: "\f195"; } +.bi-bookmark-check::before { content: "\f196"; } +.bi-bookmark-dash-fill::before { content: "\f197"; } +.bi-bookmark-dash::before { content: "\f198"; } +.bi-bookmark-fill::before { content: "\f199"; } +.bi-bookmark-heart-fill::before { content: "\f19a"; } +.bi-bookmark-heart::before { content: "\f19b"; } +.bi-bookmark-plus-fill::before { content: "\f19c"; } +.bi-bookmark-plus::before { content: "\f19d"; } +.bi-bookmark-star-fill::before { content: "\f19e"; } +.bi-bookmark-star::before { content: "\f19f"; } +.bi-bookmark-x-fill::before { content: "\f1a0"; } +.bi-bookmark-x::before { content: "\f1a1"; } +.bi-bookmark::before { content: "\f1a2"; } +.bi-bookmarks-fill::before { content: "\f1a3"; } +.bi-bookmarks::before { content: "\f1a4"; } +.bi-bookshelf::before { content: "\f1a5"; } +.bi-bootstrap-fill::before { content: "\f1a6"; } +.bi-bootstrap-reboot::before { content: "\f1a7"; } +.bi-bootstrap::before { content: "\f1a8"; } +.bi-border-all::before { content: "\f1a9"; } +.bi-border-bottom::before { content: "\f1aa"; } +.bi-border-center::before { content: "\f1ab"; } +.bi-border-inner::before { content: "\f1ac"; } +.bi-border-left::before { content: "\f1ad"; } +.bi-border-middle::before { content: "\f1ae"; } +.bi-border-outer::before { content: "\f1af"; } +.bi-border-right::before { content: "\f1b0"; } +.bi-border-style::before { content: "\f1b1"; } +.bi-border-top::before { content: "\f1b2"; } +.bi-border-width::before { content: "\f1b3"; } +.bi-border::before { content: "\f1b4"; } +.bi-bounding-box-circles::before { content: "\f1b5"; } +.bi-bounding-box::before { content: "\f1b6"; } +.bi-box-arrow-down-left::before { content: "\f1b7"; } +.bi-box-arrow-down-right::before { content: "\f1b8"; } +.bi-box-arrow-down::before { content: "\f1b9"; } +.bi-box-arrow-in-down-left::before { content: "\f1ba"; } +.bi-box-arrow-in-down-right::before { content: "\f1bb"; } +.bi-box-arrow-in-down::before { content: "\f1bc"; } +.bi-box-arrow-in-left::before { content: "\f1bd"; } +.bi-box-arrow-in-right::before { content: "\f1be"; } +.bi-box-arrow-in-up-left::before { content: "\f1bf"; } +.bi-box-arrow-in-up-right::before { content: "\f1c0"; } +.bi-box-arrow-in-up::before { content: "\f1c1"; } +.bi-box-arrow-left::before { content: "\f1c2"; } +.bi-box-arrow-right::before { content: "\f1c3"; } +.bi-box-arrow-up-left::before { content: "\f1c4"; } +.bi-box-arrow-up-right::before { content: "\f1c5"; } +.bi-box-arrow-up::before { content: "\f1c6"; } +.bi-box-seam::before { content: "\f1c7"; } +.bi-box::before { content: "\f1c8"; } +.bi-braces::before { content: "\f1c9"; } +.bi-bricks::before { content: "\f1ca"; } +.bi-briefcase-fill::before { content: "\f1cb"; } +.bi-briefcase::before { content: "\f1cc"; } +.bi-brightness-alt-high-fill::before { content: "\f1cd"; } +.bi-brightness-alt-high::before { content: "\f1ce"; } +.bi-brightness-alt-low-fill::before { content: "\f1cf"; } +.bi-brightness-alt-low::before { content: "\f1d0"; } +.bi-brightness-high-fill::before { content: "\f1d1"; } +.bi-brightness-high::before { content: "\f1d2"; } +.bi-brightness-low-fill::before { content: "\f1d3"; } +.bi-brightness-low::before { content: "\f1d4"; } +.bi-broadcast-pin::before { content: "\f1d5"; } +.bi-broadcast::before { content: "\f1d6"; } +.bi-brush-fill::before { content: "\f1d7"; } +.bi-brush::before { content: "\f1d8"; } +.bi-bucket-fill::before { content: "\f1d9"; } +.bi-bucket::before { content: "\f1da"; } +.bi-bug-fill::before { content: "\f1db"; } +.bi-bug::before { content: "\f1dc"; } +.bi-building::before { content: "\f1dd"; } +.bi-bullseye::before { content: "\f1de"; } +.bi-calculator-fill::before { content: "\f1df"; } +.bi-calculator::before { content: "\f1e0"; } +.bi-calendar-check-fill::before { content: "\f1e1"; } +.bi-calendar-check::before { content: "\f1e2"; } +.bi-calendar-date-fill::before { content: "\f1e3"; } +.bi-calendar-date::before { content: "\f1e4"; } +.bi-calendar-day-fill::before { content: "\f1e5"; } +.bi-calendar-day::before { content: "\f1e6"; } +.bi-calendar-event-fill::before { content: "\f1e7"; } +.bi-calendar-event::before { content: "\f1e8"; } +.bi-calendar-fill::before { content: "\f1e9"; } +.bi-calendar-minus-fill::before { content: "\f1ea"; } +.bi-calendar-minus::before { content: "\f1eb"; } +.bi-calendar-month-fill::before { content: "\f1ec"; } +.bi-calendar-month::before { content: "\f1ed"; } +.bi-calendar-plus-fill::before { content: "\f1ee"; } +.bi-calendar-plus::before { content: "\f1ef"; } +.bi-calendar-range-fill::before { content: "\f1f0"; } +.bi-calendar-range::before { content: "\f1f1"; } +.bi-calendar-week-fill::before { content: "\f1f2"; } +.bi-calendar-week::before { content: "\f1f3"; } +.bi-calendar-x-fill::before { content: "\f1f4"; } +.bi-calendar-x::before { content: "\f1f5"; } +.bi-calendar::before { content: "\f1f6"; } +.bi-calendar2-check-fill::before { content: "\f1f7"; } +.bi-calendar2-check::before { content: "\f1f8"; } +.bi-calendar2-date-fill::before { content: "\f1f9"; } +.bi-calendar2-date::before { content: "\f1fa"; } +.bi-calendar2-day-fill::before { content: "\f1fb"; } +.bi-calendar2-day::before { content: "\f1fc"; } +.bi-calendar2-event-fill::before { content: "\f1fd"; } +.bi-calendar2-event::before { content: "\f1fe"; } +.bi-calendar2-fill::before { content: "\f1ff"; } +.bi-calendar2-minus-fill::before { content: "\f200"; } +.bi-calendar2-minus::before { content: "\f201"; } +.bi-calendar2-month-fill::before { content: "\f202"; } +.bi-calendar2-month::before { content: "\f203"; } +.bi-calendar2-plus-fill::before { content: "\f204"; } +.bi-calendar2-plus::before { content: "\f205"; } +.bi-calendar2-range-fill::before { content: "\f206"; } +.bi-calendar2-range::before { content: "\f207"; } +.bi-calendar2-week-fill::before { content: "\f208"; } +.bi-calendar2-week::before { content: "\f209"; } +.bi-calendar2-x-fill::before { content: "\f20a"; } +.bi-calendar2-x::before { content: "\f20b"; } +.bi-calendar2::before { content: "\f20c"; } +.bi-calendar3-event-fill::before { content: "\f20d"; } +.bi-calendar3-event::before { content: "\f20e"; } +.bi-calendar3-fill::before { content: "\f20f"; } +.bi-calendar3-range-fill::before { content: "\f210"; } +.bi-calendar3-range::before { content: "\f211"; } +.bi-calendar3-week-fill::before { content: "\f212"; } +.bi-calendar3-week::before { content: "\f213"; } +.bi-calendar3::before { content: "\f214"; } +.bi-calendar4-event::before { content: "\f215"; } +.bi-calendar4-range::before { content: "\f216"; } +.bi-calendar4-week::before { content: "\f217"; } +.bi-calendar4::before { content: "\f218"; } +.bi-camera-fill::before { content: "\f219"; } +.bi-camera-reels-fill::before { content: "\f21a"; } +.bi-camera-reels::before { content: "\f21b"; } +.bi-camera-video-fill::before { content: "\f21c"; } +.bi-camera-video-off-fill::before { content: "\f21d"; } +.bi-camera-video-off::before { content: "\f21e"; } +.bi-camera-video::before { content: "\f21f"; } +.bi-camera::before { content: "\f220"; } +.bi-camera2::before { content: "\f221"; } +.bi-capslock-fill::before { content: "\f222"; } +.bi-capslock::before { content: "\f223"; } +.bi-card-checklist::before { content: "\f224"; } +.bi-card-heading::before { content: "\f225"; } +.bi-card-image::before { content: "\f226"; } +.bi-card-list::before { content: "\f227"; } +.bi-card-text::before { content: "\f228"; } +.bi-caret-down-fill::before { content: "\f229"; } +.bi-caret-down-square-fill::before { content: "\f22a"; } +.bi-caret-down-square::before { content: "\f22b"; } +.bi-caret-down::before { content: "\f22c"; } +.bi-caret-left-fill::before { content: "\f22d"; } +.bi-caret-left-square-fill::before { content: "\f22e"; } +.bi-caret-left-square::before { content: "\f22f"; } +.bi-caret-left::before { content: "\f230"; } +.bi-caret-right-fill::before { content: "\f231"; } +.bi-caret-right-square-fill::before { content: "\f232"; } +.bi-caret-right-square::before { content: "\f233"; } +.bi-caret-right::before { content: "\f234"; } +.bi-caret-up-fill::before { content: "\f235"; } +.bi-caret-up-square-fill::before { content: "\f236"; } +.bi-caret-up-square::before { content: "\f237"; } +.bi-caret-up::before { content: "\f238"; } +.bi-cart-check-fill::before { content: "\f239"; } +.bi-cart-check::before { content: "\f23a"; } +.bi-cart-dash-fill::before { content: "\f23b"; } +.bi-cart-dash::before { content: "\f23c"; } +.bi-cart-fill::before { content: "\f23d"; } +.bi-cart-plus-fill::before { content: "\f23e"; } +.bi-cart-plus::before { content: "\f23f"; } +.bi-cart-x-fill::before { content: "\f240"; } +.bi-cart-x::before { content: "\f241"; } +.bi-cart::before { content: "\f242"; } +.bi-cart2::before { content: "\f243"; } +.bi-cart3::before { content: "\f244"; } +.bi-cart4::before { content: "\f245"; } +.bi-cash-stack::before { content: "\f246"; } +.bi-cash::before { content: "\f247"; } +.bi-cast::before { content: "\f248"; } +.bi-chat-dots-fill::before { content: "\f249"; } +.bi-chat-dots::before { content: "\f24a"; } +.bi-chat-fill::before { content: "\f24b"; } +.bi-chat-left-dots-fill::before { content: "\f24c"; } +.bi-chat-left-dots::before { content: "\f24d"; } +.bi-chat-left-fill::before { content: "\f24e"; } +.bi-chat-left-quote-fill::before { content: "\f24f"; } +.bi-chat-left-quote::before { content: "\f250"; } +.bi-chat-left-text-fill::before { content: "\f251"; } +.bi-chat-left-text::before { content: "\f252"; } +.bi-chat-left::before { content: "\f253"; } +.bi-chat-quote-fill::before { content: "\f254"; } +.bi-chat-quote::before { content: "\f255"; } +.bi-chat-right-dots-fill::before { content: "\f256"; } +.bi-chat-right-dots::before { content: "\f257"; } +.bi-chat-right-fill::before { content: "\f258"; } +.bi-chat-right-quote-fill::before { content: "\f259"; } +.bi-chat-right-quote::before { content: "\f25a"; } +.bi-chat-right-text-fill::before { content: "\f25b"; } +.bi-chat-right-text::before { content: "\f25c"; } +.bi-chat-right::before { content: "\f25d"; } +.bi-chat-square-dots-fill::before { content: "\f25e"; } +.bi-chat-square-dots::before { content: "\f25f"; } +.bi-chat-square-fill::before { content: "\f260"; } +.bi-chat-square-quote-fill::before { content: "\f261"; } +.bi-chat-square-quote::before { content: "\f262"; } +.bi-chat-square-text-fill::before { content: "\f263"; } +.bi-chat-square-text::before { content: "\f264"; } +.bi-chat-square::before { content: "\f265"; } +.bi-chat-text-fill::before { content: "\f266"; } +.bi-chat-text::before { content: "\f267"; } +.bi-chat::before { content: "\f268"; } +.bi-check-all::before { content: "\f269"; } +.bi-check-circle-fill::before { content: "\f26a"; } +.bi-check-circle::before { content: "\f26b"; } +.bi-check-square-fill::before { content: "\f26c"; } +.bi-check-square::before { content: "\f26d"; } +.bi-check::before { content: "\f26e"; } +.bi-check2-all::before { content: "\f26f"; } +.bi-check2-circle::before { content: "\f270"; } +.bi-check2-square::before { content: "\f271"; } +.bi-check2::before { content: "\f272"; } +.bi-chevron-bar-contract::before { content: "\f273"; } +.bi-chevron-bar-down::before { content: "\f274"; } +.bi-chevron-bar-expand::before { content: "\f275"; } +.bi-chevron-bar-left::before { content: "\f276"; } +.bi-chevron-bar-right::before { content: "\f277"; } +.bi-chevron-bar-up::before { content: "\f278"; } +.bi-chevron-compact-down::before { content: "\f279"; } +.bi-chevron-compact-left::before { content: "\f27a"; } +.bi-chevron-compact-right::before { content: "\f27b"; } +.bi-chevron-compact-up::before { content: "\f27c"; } +.bi-chevron-contract::before { content: "\f27d"; } +.bi-chevron-double-down::before { content: "\f27e"; } +.bi-chevron-double-left::before { content: "\f27f"; } +.bi-chevron-double-right::before { content: "\f280"; } +.bi-chevron-double-up::before { content: "\f281"; } +.bi-chevron-down::before { content: "\f282"; } +.bi-chevron-expand::before { content: "\f283"; } +.bi-chevron-left::before { content: "\f284"; } +.bi-chevron-right::before { content: "\f285"; } +.bi-chevron-up::before { content: "\f286"; } +.bi-circle-fill::before { content: "\f287"; } +.bi-circle-half::before { content: "\f288"; } +.bi-circle-square::before { content: "\f289"; } +.bi-circle::before { content: "\f28a"; } +.bi-clipboard-check::before { content: "\f28b"; } +.bi-clipboard-data::before { content: "\f28c"; } +.bi-clipboard-minus::before { content: "\f28d"; } +.bi-clipboard-plus::before { content: "\f28e"; } +.bi-clipboard-x::before { content: "\f28f"; } +.bi-clipboard::before { content: "\f290"; } +.bi-clock-fill::before { content: "\f291"; } +.bi-clock-history::before { content: "\f292"; } +.bi-clock::before { content: "\f293"; } +.bi-cloud-arrow-down-fill::before { content: "\f294"; } +.bi-cloud-arrow-down::before { content: "\f295"; } +.bi-cloud-arrow-up-fill::before { content: "\f296"; } +.bi-cloud-arrow-up::before { content: "\f297"; } +.bi-cloud-check-fill::before { content: "\f298"; } +.bi-cloud-check::before { content: "\f299"; } +.bi-cloud-download-fill::before { content: "\f29a"; } +.bi-cloud-download::before { content: "\f29b"; } +.bi-cloud-drizzle-fill::before { content: "\f29c"; } +.bi-cloud-drizzle::before { content: "\f29d"; } +.bi-cloud-fill::before { content: "\f29e"; } +.bi-cloud-fog-fill::before { content: "\f29f"; } +.bi-cloud-fog::before { content: "\f2a0"; } +.bi-cloud-fog2-fill::before { content: "\f2a1"; } +.bi-cloud-fog2::before { content: "\f2a2"; } +.bi-cloud-hail-fill::before { content: "\f2a3"; } +.bi-cloud-hail::before { content: "\f2a4"; } +.bi-cloud-haze-fill::before { content: "\f2a6"; } +.bi-cloud-haze::before { content: "\f2a7"; } +.bi-cloud-haze2-fill::before { content: "\f2a8"; } +.bi-cloud-lightning-fill::before { content: "\f2a9"; } +.bi-cloud-lightning-rain-fill::before { content: "\f2aa"; } +.bi-cloud-lightning-rain::before { content: "\f2ab"; } +.bi-cloud-lightning::before { content: "\f2ac"; } +.bi-cloud-minus-fill::before { content: "\f2ad"; } +.bi-cloud-minus::before { content: "\f2ae"; } +.bi-cloud-moon-fill::before { content: "\f2af"; } +.bi-cloud-moon::before { content: "\f2b0"; } +.bi-cloud-plus-fill::before { content: "\f2b1"; } +.bi-cloud-plus::before { content: "\f2b2"; } +.bi-cloud-rain-fill::before { content: "\f2b3"; } +.bi-cloud-rain-heavy-fill::before { content: "\f2b4"; } +.bi-cloud-rain-heavy::before { content: "\f2b5"; } +.bi-cloud-rain::before { content: "\f2b6"; } +.bi-cloud-slash-fill::before { content: "\f2b7"; } +.bi-cloud-slash::before { content: "\f2b8"; } +.bi-cloud-sleet-fill::before { content: "\f2b9"; } +.bi-cloud-sleet::before { content: "\f2ba"; } +.bi-cloud-snow-fill::before { content: "\f2bb"; } +.bi-cloud-snow::before { content: "\f2bc"; } +.bi-cloud-sun-fill::before { content: "\f2bd"; } +.bi-cloud-sun::before { content: "\f2be"; } +.bi-cloud-upload-fill::before { content: "\f2bf"; } +.bi-cloud-upload::before { content: "\f2c0"; } +.bi-cloud::before { content: "\f2c1"; } +.bi-clouds-fill::before { content: "\f2c2"; } +.bi-clouds::before { content: "\f2c3"; } +.bi-cloudy-fill::before { content: "\f2c4"; } +.bi-cloudy::before { content: "\f2c5"; } +.bi-code-slash::before { content: "\f2c6"; } +.bi-code-square::before { content: "\f2c7"; } +.bi-code::before { content: "\f2c8"; } +.bi-collection-fill::before { content: "\f2c9"; } +.bi-collection-play-fill::before { content: "\f2ca"; } +.bi-collection-play::before { content: "\f2cb"; } +.bi-collection::before { content: "\f2cc"; } +.bi-columns-gap::before { content: "\f2cd"; } +.bi-columns::before { content: "\f2ce"; } +.bi-command::before { content: "\f2cf"; } +.bi-compass-fill::before { content: "\f2d0"; } +.bi-compass::before { content: "\f2d1"; } +.bi-cone-striped::before { content: "\f2d2"; } +.bi-cone::before { content: "\f2d3"; } +.bi-controller::before { content: "\f2d4"; } +.bi-cpu-fill::before { content: "\f2d5"; } +.bi-cpu::before { content: "\f2d6"; } +.bi-credit-card-2-back-fill::before { content: "\f2d7"; } +.bi-credit-card-2-back::before { content: "\f2d8"; } +.bi-credit-card-2-front-fill::before { content: "\f2d9"; } +.bi-credit-card-2-front::before { content: "\f2da"; } +.bi-credit-card-fill::before { content: "\f2db"; } +.bi-credit-card::before { content: "\f2dc"; } +.bi-crop::before { content: "\f2dd"; } +.bi-cup-fill::before { content: "\f2de"; } +.bi-cup-straw::before { content: "\f2df"; } +.bi-cup::before { content: "\f2e0"; } +.bi-cursor-fill::before { content: "\f2e1"; } +.bi-cursor-text::before { content: "\f2e2"; } +.bi-cursor::before { content: "\f2e3"; } +.bi-dash-circle-dotted::before { content: "\f2e4"; } +.bi-dash-circle-fill::before { content: "\f2e5"; } +.bi-dash-circle::before { content: "\f2e6"; } +.bi-dash-square-dotted::before { content: "\f2e7"; } +.bi-dash-square-fill::before { content: "\f2e8"; } +.bi-dash-square::before { content: "\f2e9"; } +.bi-dash::before { content: "\f2ea"; } +.bi-diagram-2-fill::before { content: "\f2eb"; } +.bi-diagram-2::before { content: "\f2ec"; } +.bi-diagram-3-fill::before { content: "\f2ed"; } +.bi-diagram-3::before { content: "\f2ee"; } +.bi-diamond-fill::before { content: "\f2ef"; } +.bi-diamond-half::before { content: "\f2f0"; } +.bi-diamond::before { content: "\f2f1"; } +.bi-dice-1-fill::before { content: "\f2f2"; } +.bi-dice-1::before { content: "\f2f3"; } +.bi-dice-2-fill::before { content: "\f2f4"; } +.bi-dice-2::before { content: "\f2f5"; } +.bi-dice-3-fill::before { content: "\f2f6"; } +.bi-dice-3::before { content: "\f2f7"; } +.bi-dice-4-fill::before { content: "\f2f8"; } +.bi-dice-4::before { content: "\f2f9"; } +.bi-dice-5-fill::before { content: "\f2fa"; } +.bi-dice-5::before { content: "\f2fb"; } +.bi-dice-6-fill::before { content: "\f2fc"; } +.bi-dice-6::before { content: "\f2fd"; } +.bi-disc-fill::before { content: "\f2fe"; } +.bi-disc::before { content: "\f2ff"; } +.bi-discord::before { content: "\f300"; } +.bi-display-fill::before { content: "\f301"; } +.bi-display::before { content: "\f302"; } +.bi-distribute-horizontal::before { content: "\f303"; } +.bi-distribute-vertical::before { content: "\f304"; } +.bi-door-closed-fill::before { content: "\f305"; } +.bi-door-closed::before { content: "\f306"; } +.bi-door-open-fill::before { content: "\f307"; } +.bi-door-open::before { content: "\f308"; } +.bi-dot::before { content: "\f309"; } +.bi-download::before { content: "\f30a"; } +.bi-droplet-fill::before { content: "\f30b"; } +.bi-droplet-half::before { content: "\f30c"; } +.bi-droplet::before { content: "\f30d"; } +.bi-earbuds::before { content: "\f30e"; } +.bi-easel-fill::before { content: "\f30f"; } +.bi-easel::before { content: "\f310"; } +.bi-egg-fill::before { content: "\f311"; } +.bi-egg-fried::before { content: "\f312"; } +.bi-egg::before { content: "\f313"; } +.bi-eject-fill::before { content: "\f314"; } +.bi-eject::before { content: "\f315"; } +.bi-emoji-angry-fill::before { content: "\f316"; } +.bi-emoji-angry::before { content: "\f317"; } +.bi-emoji-dizzy-fill::before { content: "\f318"; } +.bi-emoji-dizzy::before { content: "\f319"; } +.bi-emoji-expressionless-fill::before { content: "\f31a"; } +.bi-emoji-expressionless::before { content: "\f31b"; } +.bi-emoji-frown-fill::before { content: "\f31c"; } +.bi-emoji-frown::before { content: "\f31d"; } +.bi-emoji-heart-eyes-fill::before { content: "\f31e"; } +.bi-emoji-heart-eyes::before { content: "\f31f"; } +.bi-emoji-laughing-fill::before { content: "\f320"; } +.bi-emoji-laughing::before { content: "\f321"; } +.bi-emoji-neutral-fill::before { content: "\f322"; } +.bi-emoji-neutral::before { content: "\f323"; } +.bi-emoji-smile-fill::before { content: "\f324"; } +.bi-emoji-smile-upside-down-fill::before { content: "\f325"; } +.bi-emoji-smile-upside-down::before { content: "\f326"; } +.bi-emoji-smile::before { content: "\f327"; } +.bi-emoji-sunglasses-fill::before { content: "\f328"; } +.bi-emoji-sunglasses::before { content: "\f329"; } +.bi-emoji-wink-fill::before { content: "\f32a"; } +.bi-emoji-wink::before { content: "\f32b"; } +.bi-envelope-fill::before { content: "\f32c"; } +.bi-envelope-open-fill::before { content: "\f32d"; } +.bi-envelope-open::before { content: "\f32e"; } +.bi-envelope::before { content: "\f32f"; } +.bi-eraser-fill::before { content: "\f330"; } +.bi-eraser::before { content: "\f331"; } +.bi-exclamation-circle-fill::before { content: "\f332"; } +.bi-exclamation-circle::before { content: "\f333"; } +.bi-exclamation-diamond-fill::before { content: "\f334"; } +.bi-exclamation-diamond::before { content: "\f335"; } +.bi-exclamation-octagon-fill::before { content: "\f336"; } +.bi-exclamation-octagon::before { content: "\f337"; } +.bi-exclamation-square-fill::before { content: "\f338"; } +.bi-exclamation-square::before { content: "\f339"; } +.bi-exclamation-triangle-fill::before { content: "\f33a"; } +.bi-exclamation-triangle::before { content: "\f33b"; } +.bi-exclamation::before { content: "\f33c"; } +.bi-exclude::before { content: "\f33d"; } +.bi-eye-fill::before { content: "\f33e"; } +.bi-eye-slash-fill::before { content: "\f33f"; } +.bi-eye-slash::before { content: "\f340"; } +.bi-eye::before { content: "\f341"; } +.bi-eyedropper::before { content: "\f342"; } +.bi-eyeglasses::before { content: "\f343"; } +.bi-facebook::before { content: "\f344"; } +.bi-file-arrow-down-fill::before { content: "\f345"; } +.bi-file-arrow-down::before { content: "\f346"; } +.bi-file-arrow-up-fill::before { content: "\f347"; } +.bi-file-arrow-up::before { content: "\f348"; } +.bi-file-bar-graph-fill::before { content: "\f349"; } +.bi-file-bar-graph::before { content: "\f34a"; } +.bi-file-binary-fill::before { content: "\f34b"; } +.bi-file-binary::before { content: "\f34c"; } +.bi-file-break-fill::before { content: "\f34d"; } +.bi-file-break::before { content: "\f34e"; } +.bi-file-check-fill::before { content: "\f34f"; } +.bi-file-check::before { content: "\f350"; } +.bi-file-code-fill::before { content: "\f351"; } +.bi-file-code::before { content: "\f352"; } +.bi-file-diff-fill::before { content: "\f353"; } +.bi-file-diff::before { content: "\f354"; } +.bi-file-earmark-arrow-down-fill::before { content: "\f355"; } +.bi-file-earmark-arrow-down::before { content: "\f356"; } +.bi-file-earmark-arrow-up-fill::before { content: "\f357"; } +.bi-file-earmark-arrow-up::before { content: "\f358"; } +.bi-file-earmark-bar-graph-fill::before { content: "\f359"; } +.bi-file-earmark-bar-graph::before { content: "\f35a"; } +.bi-file-earmark-binary-fill::before { content: "\f35b"; } +.bi-file-earmark-binary::before { content: "\f35c"; } +.bi-file-earmark-break-fill::before { content: "\f35d"; } +.bi-file-earmark-break::before { content: "\f35e"; } +.bi-file-earmark-check-fill::before { content: "\f35f"; } +.bi-file-earmark-check::before { content: "\f360"; } +.bi-file-earmark-code-fill::before { content: "\f361"; } +.bi-file-earmark-code::before { content: "\f362"; } +.bi-file-earmark-diff-fill::before { content: "\f363"; } +.bi-file-earmark-diff::before { content: "\f364"; } +.bi-file-earmark-easel-fill::before { content: "\f365"; } +.bi-file-earmark-easel::before { content: "\f366"; } +.bi-file-earmark-excel-fill::before { content: "\f367"; } +.bi-file-earmark-excel::before { content: "\f368"; } +.bi-file-earmark-fill::before { content: "\f369"; } +.bi-file-earmark-font-fill::before { content: "\f36a"; } +.bi-file-earmark-font::before { content: "\f36b"; } +.bi-file-earmark-image-fill::before { content: "\f36c"; } +.bi-file-earmark-image::before { content: "\f36d"; } +.bi-file-earmark-lock-fill::before { content: "\f36e"; } +.bi-file-earmark-lock::before { content: "\f36f"; } +.bi-file-earmark-lock2-fill::before { content: "\f370"; } +.bi-file-earmark-lock2::before { content: "\f371"; } +.bi-file-earmark-medical-fill::before { content: "\f372"; } +.bi-file-earmark-medical::before { content: "\f373"; } +.bi-file-earmark-minus-fill::before { content: "\f374"; } +.bi-file-earmark-minus::before { content: "\f375"; } +.bi-file-earmark-music-fill::before { content: "\f376"; } +.bi-file-earmark-music::before { content: "\f377"; } +.bi-file-earmark-person-fill::before { content: "\f378"; } +.bi-file-earmark-person::before { content: "\f379"; } +.bi-file-earmark-play-fill::before { content: "\f37a"; } +.bi-file-earmark-play::before { content: "\f37b"; } +.bi-file-earmark-plus-fill::before { content: "\f37c"; } +.bi-file-earmark-plus::before { content: "\f37d"; } +.bi-file-earmark-post-fill::before { content: "\f37e"; } +.bi-file-earmark-post::before { content: "\f37f"; } +.bi-file-earmark-ppt-fill::before { content: "\f380"; } +.bi-file-earmark-ppt::before { content: "\f381"; } +.bi-file-earmark-richtext-fill::before { content: "\f382"; } +.bi-file-earmark-richtext::before { content: "\f383"; } +.bi-file-earmark-ruled-fill::before { content: "\f384"; } +.bi-file-earmark-ruled::before { content: "\f385"; } +.bi-file-earmark-slides-fill::before { content: "\f386"; } +.bi-file-earmark-slides::before { content: "\f387"; } +.bi-file-earmark-spreadsheet-fill::before { content: "\f388"; } +.bi-file-earmark-spreadsheet::before { content: "\f389"; } +.bi-file-earmark-text-fill::before { content: "\f38a"; } +.bi-file-earmark-text::before { content: "\f38b"; } +.bi-file-earmark-word-fill::before { content: "\f38c"; } +.bi-file-earmark-word::before { content: "\f38d"; } +.bi-file-earmark-x-fill::before { content: "\f38e"; } +.bi-file-earmark-x::before { content: "\f38f"; } +.bi-file-earmark-zip-fill::before { content: "\f390"; } +.bi-file-earmark-zip::before { content: "\f391"; } +.bi-file-earmark::before { content: "\f392"; } +.bi-file-easel-fill::before { content: "\f393"; } +.bi-file-easel::before { content: "\f394"; } +.bi-file-excel-fill::before { content: "\f395"; } +.bi-file-excel::before { content: "\f396"; } +.bi-file-fill::before { content: "\f397"; } +.bi-file-font-fill::before { content: "\f398"; } +.bi-file-font::before { content: "\f399"; } +.bi-file-image-fill::before { content: "\f39a"; } +.bi-file-image::before { content: "\f39b"; } +.bi-file-lock-fill::before { content: "\f39c"; } +.bi-file-lock::before { content: "\f39d"; } +.bi-file-lock2-fill::before { content: "\f39e"; } +.bi-file-lock2::before { content: "\f39f"; } +.bi-file-medical-fill::before { content: "\f3a0"; } +.bi-file-medical::before { content: "\f3a1"; } +.bi-file-minus-fill::before { content: "\f3a2"; } +.bi-file-minus::before { content: "\f3a3"; } +.bi-file-music-fill::before { content: "\f3a4"; } +.bi-file-music::before { content: "\f3a5"; } +.bi-file-person-fill::before { content: "\f3a6"; } +.bi-file-person::before { content: "\f3a7"; } +.bi-file-play-fill::before { content: "\f3a8"; } +.bi-file-play::before { content: "\f3a9"; } +.bi-file-plus-fill::before { content: "\f3aa"; } +.bi-file-plus::before { content: "\f3ab"; } +.bi-file-post-fill::before { content: "\f3ac"; } +.bi-file-post::before { content: "\f3ad"; } +.bi-file-ppt-fill::before { content: "\f3ae"; } +.bi-file-ppt::before { content: "\f3af"; } +.bi-file-richtext-fill::before { content: "\f3b0"; } +.bi-file-richtext::before { content: "\f3b1"; } +.bi-file-ruled-fill::before { content: "\f3b2"; } +.bi-file-ruled::before { content: "\f3b3"; } +.bi-file-slides-fill::before { content: "\f3b4"; } +.bi-file-slides::before { content: "\f3b5"; } +.bi-file-spreadsheet-fill::before { content: "\f3b6"; } +.bi-file-spreadsheet::before { content: "\f3b7"; } +.bi-file-text-fill::before { content: "\f3b8"; } +.bi-file-text::before { content: "\f3b9"; } +.bi-file-word-fill::before { content: "\f3ba"; } +.bi-file-word::before { content: "\f3bb"; } +.bi-file-x-fill::before { content: "\f3bc"; } +.bi-file-x::before { content: "\f3bd"; } +.bi-file-zip-fill::before { content: "\f3be"; } +.bi-file-zip::before { content: "\f3bf"; } +.bi-file::before { content: "\f3c0"; } +.bi-files-alt::before { content: "\f3c1"; } +.bi-files::before { content: "\f3c2"; } +.bi-film::before { content: "\f3c3"; } +.bi-filter-circle-fill::before { content: "\f3c4"; } +.bi-filter-circle::before { content: "\f3c5"; } +.bi-filter-left::before { content: "\f3c6"; } +.bi-filter-right::before { content: "\f3c7"; } +.bi-filter-square-fill::before { content: "\f3c8"; } +.bi-filter-square::before { content: "\f3c9"; } +.bi-filter::before { content: "\f3ca"; } +.bi-flag-fill::before { content: "\f3cb"; } +.bi-flag::before { content: "\f3cc"; } +.bi-flower1::before { content: "\f3cd"; } +.bi-flower2::before { content: "\f3ce"; } +.bi-flower3::before { content: "\f3cf"; } +.bi-folder-check::before { content: "\f3d0"; } +.bi-folder-fill::before { content: "\f3d1"; } +.bi-folder-minus::before { content: "\f3d2"; } +.bi-folder-plus::before { content: "\f3d3"; } +.bi-folder-symlink-fill::before { content: "\f3d4"; } +.bi-folder-symlink::before { content: "\f3d5"; } +.bi-folder-x::before { content: "\f3d6"; } +.bi-folder::before { content: "\f3d7"; } +.bi-folder2-open::before { content: "\f3d8"; } +.bi-folder2::before { content: "\f3d9"; } +.bi-fonts::before { content: "\f3da"; } +.bi-forward-fill::before { content: "\f3db"; } +.bi-forward::before { content: "\f3dc"; } +.bi-front::before { content: "\f3dd"; } +.bi-fullscreen-exit::before { content: "\f3de"; } +.bi-fullscreen::before { content: "\f3df"; } +.bi-funnel-fill::before { content: "\f3e0"; } +.bi-funnel::before { content: "\f3e1"; } +.bi-gear-fill::before { content: "\f3e2"; } +.bi-gear-wide-connected::before { content: "\f3e3"; } +.bi-gear-wide::before { content: "\f3e4"; } +.bi-gear::before { content: "\f3e5"; } +.bi-gem::before { content: "\f3e6"; } +.bi-geo-alt-fill::before { content: "\f3e7"; } +.bi-geo-alt::before { content: "\f3e8"; } +.bi-geo-fill::before { content: "\f3e9"; } +.bi-geo::before { content: "\f3ea"; } +.bi-gift-fill::before { content: "\f3eb"; } +.bi-gift::before { content: "\f3ec"; } +.bi-github::before { content: "\f3ed"; } +.bi-globe::before { content: "\f3ee"; } +.bi-globe2::before { content: "\f3ef"; } +.bi-google::before { content: "\f3f0"; } +.bi-graph-down::before { content: "\f3f1"; } +.bi-graph-up::before { content: "\f3f2"; } +.bi-grid-1x2-fill::before { content: "\f3f3"; } +.bi-grid-1x2::before { content: "\f3f4"; } +.bi-grid-3x2-gap-fill::before { content: "\f3f5"; } +.bi-grid-3x2-gap::before { content: "\f3f6"; } +.bi-grid-3x2::before { content: "\f3f7"; } +.bi-grid-3x3-gap-fill::before { content: "\f3f8"; } +.bi-grid-3x3-gap::before { content: "\f3f9"; } +.bi-grid-3x3::before { content: "\f3fa"; } +.bi-grid-fill::before { content: "\f3fb"; } +.bi-grid::before { content: "\f3fc"; } +.bi-grip-horizontal::before { content: "\f3fd"; } +.bi-grip-vertical::before { content: "\f3fe"; } +.bi-hammer::before { content: "\f3ff"; } +.bi-hand-index-fill::before { content: "\f400"; } +.bi-hand-index-thumb-fill::before { content: "\f401"; } +.bi-hand-index-thumb::before { content: "\f402"; } +.bi-hand-index::before { content: "\f403"; } +.bi-hand-thumbs-down-fill::before { content: "\f404"; } +.bi-hand-thumbs-down::before { content: "\f405"; } +.bi-hand-thumbs-up-fill::before { content: "\f406"; } +.bi-hand-thumbs-up::before { content: "\f407"; } +.bi-handbag-fill::before { content: "\f408"; } +.bi-handbag::before { content: "\f409"; } +.bi-hash::before { content: "\f40a"; } +.bi-hdd-fill::before { content: "\f40b"; } +.bi-hdd-network-fill::before { content: "\f40c"; } +.bi-hdd-network::before { content: "\f40d"; } +.bi-hdd-rack-fill::before { content: "\f40e"; } +.bi-hdd-rack::before { content: "\f40f"; } +.bi-hdd-stack-fill::before { content: "\f410"; } +.bi-hdd-stack::before { content: "\f411"; } +.bi-hdd::before { content: "\f412"; } +.bi-headphones::before { content: "\f413"; } +.bi-headset::before { content: "\f414"; } +.bi-heart-fill::before { content: "\f415"; } +.bi-heart-half::before { content: "\f416"; } +.bi-heart::before { content: "\f417"; } +.bi-heptagon-fill::before { content: "\f418"; } +.bi-heptagon-half::before { content: "\f419"; } +.bi-heptagon::before { content: "\f41a"; } +.bi-hexagon-fill::before { content: "\f41b"; } +.bi-hexagon-half::before { content: "\f41c"; } +.bi-hexagon::before { content: "\f41d"; } +.bi-hourglass-bottom::before { content: "\f41e"; } +.bi-hourglass-split::before { content: "\f41f"; } +.bi-hourglass-top::before { content: "\f420"; } +.bi-hourglass::before { content: "\f421"; } +.bi-house-door-fill::before { content: "\f422"; } +.bi-house-door::before { content: "\f423"; } +.bi-house-fill::before { content: "\f424"; } +.bi-house::before { content: "\f425"; } +.bi-hr::before { content: "\f426"; } +.bi-hurricane::before { content: "\f427"; } +.bi-image-alt::before { content: "\f428"; } +.bi-image-fill::before { content: "\f429"; } +.bi-image::before { content: "\f42a"; } +.bi-images::before { content: "\f42b"; } +.bi-inbox-fill::before { content: "\f42c"; } +.bi-inbox::before { content: "\f42d"; } +.bi-inboxes-fill::before { content: "\f42e"; } +.bi-inboxes::before { content: "\f42f"; } +.bi-info-circle-fill::before { content: "\f430"; } +.bi-info-circle::before { content: "\f431"; } +.bi-info-square-fill::before { content: "\f432"; } +.bi-info-square::before { content: "\f433"; } +.bi-info::before { content: "\f434"; } +.bi-input-cursor-text::before { content: "\f435"; } +.bi-input-cursor::before { content: "\f436"; } +.bi-instagram::before { content: "\f437"; } +.bi-intersect::before { content: "\f438"; } +.bi-journal-album::before { content: "\f439"; } +.bi-journal-arrow-down::before { content: "\f43a"; } +.bi-journal-arrow-up::before { content: "\f43b"; } +.bi-journal-bookmark-fill::before { content: "\f43c"; } +.bi-journal-bookmark::before { content: "\f43d"; } +.bi-journal-check::before { content: "\f43e"; } +.bi-journal-code::before { content: "\f43f"; } +.bi-journal-medical::before { content: "\f440"; } +.bi-journal-minus::before { content: "\f441"; } +.bi-journal-plus::before { content: "\f442"; } +.bi-journal-richtext::before { content: "\f443"; } +.bi-journal-text::before { content: "\f444"; } +.bi-journal-x::before { content: "\f445"; } +.bi-journal::before { content: "\f446"; } +.bi-journals::before { content: "\f447"; } +.bi-joystick::before { content: "\f448"; } +.bi-justify-left::before { content: "\f449"; } +.bi-justify-right::before { content: "\f44a"; } +.bi-justify::before { content: "\f44b"; } +.bi-kanban-fill::before { content: "\f44c"; } +.bi-kanban::before { content: "\f44d"; } +.bi-key-fill::before { content: "\f44e"; } +.bi-key::before { content: "\f44f"; } +.bi-keyboard-fill::before { content: "\f450"; } +.bi-keyboard::before { content: "\f451"; } +.bi-ladder::before { content: "\f452"; } +.bi-lamp-fill::before { content: "\f453"; } +.bi-lamp::before { content: "\f454"; } +.bi-laptop-fill::before { content: "\f455"; } +.bi-laptop::before { content: "\f456"; } +.bi-layer-backward::before { content: "\f457"; } +.bi-layer-forward::before { content: "\f458"; } +.bi-layers-fill::before { content: "\f459"; } +.bi-layers-half::before { content: "\f45a"; } +.bi-layers::before { content: "\f45b"; } +.bi-layout-sidebar-inset-reverse::before { content: "\f45c"; } +.bi-layout-sidebar-inset::before { content: "\f45d"; } +.bi-layout-sidebar-reverse::before { content: "\f45e"; } +.bi-layout-sidebar::before { content: "\f45f"; } +.bi-layout-split::before { content: "\f460"; } +.bi-layout-text-sidebar-reverse::before { content: "\f461"; } +.bi-layout-text-sidebar::before { content: "\f462"; } +.bi-layout-text-window-reverse::before { content: "\f463"; } +.bi-layout-text-window::before { content: "\f464"; } +.bi-layout-three-columns::before { content: "\f465"; } +.bi-layout-wtf::before { content: "\f466"; } +.bi-life-preserver::before { content: "\f467"; } +.bi-lightbulb-fill::before { content: "\f468"; } +.bi-lightbulb-off-fill::before { content: "\f469"; } +.bi-lightbulb-off::before { content: "\f46a"; } +.bi-lightbulb::before { content: "\f46b"; } +.bi-lightning-charge-fill::before { content: "\f46c"; } +.bi-lightning-charge::before { content: "\f46d"; } +.bi-lightning-fill::before { content: "\f46e"; } +.bi-lightning::before { content: "\f46f"; } +.bi-link-45deg::before { content: "\f470"; } +.bi-link::before { content: "\f471"; } +.bi-linkedin::before { content: "\f472"; } +.bi-list-check::before { content: "\f473"; } +.bi-list-nested::before { content: "\f474"; } +.bi-list-ol::before { content: "\f475"; } +.bi-list-stars::before { content: "\f476"; } +.bi-list-task::before { content: "\f477"; } +.bi-list-ul::before { content: "\f478"; } +.bi-list::before { content: "\f479"; } +.bi-lock-fill::before { content: "\f47a"; } +.bi-lock::before { content: "\f47b"; } +.bi-mailbox::before { content: "\f47c"; } +.bi-mailbox2::before { content: "\f47d"; } +.bi-map-fill::before { content: "\f47e"; } +.bi-map::before { content: "\f47f"; } +.bi-markdown-fill::before { content: "\f480"; } +.bi-markdown::before { content: "\f481"; } +.bi-mask::before { content: "\f482"; } +.bi-megaphone-fill::before { content: "\f483"; } +.bi-megaphone::before { content: "\f484"; } +.bi-menu-app-fill::before { content: "\f485"; } +.bi-menu-app::before { content: "\f486"; } +.bi-menu-button-fill::before { content: "\f487"; } +.bi-menu-button-wide-fill::before { content: "\f488"; } +.bi-menu-button-wide::before { content: "\f489"; } +.bi-menu-button::before { content: "\f48a"; } +.bi-menu-down::before { content: "\f48b"; } +.bi-menu-up::before { content: "\f48c"; } +.bi-mic-fill::before { content: "\f48d"; } +.bi-mic-mute-fill::before { content: "\f48e"; } +.bi-mic-mute::before { content: "\f48f"; } +.bi-mic::before { content: "\f490"; } +.bi-minecart-loaded::before { content: "\f491"; } +.bi-minecart::before { content: "\f492"; } +.bi-moisture::before { content: "\f493"; } +.bi-moon-fill::before { content: "\f494"; } +.bi-moon-stars-fill::before { content: "\f495"; } +.bi-moon-stars::before { content: "\f496"; } +.bi-moon::before { content: "\f497"; } +.bi-mouse-fill::before { content: "\f498"; } +.bi-mouse::before { content: "\f499"; } +.bi-mouse2-fill::before { content: "\f49a"; } +.bi-mouse2::before { content: "\f49b"; } +.bi-mouse3-fill::before { content: "\f49c"; } +.bi-mouse3::before { content: "\f49d"; } +.bi-music-note-beamed::before { content: "\f49e"; } +.bi-music-note-list::before { content: "\f49f"; } +.bi-music-note::before { content: "\f4a0"; } +.bi-music-player-fill::before { content: "\f4a1"; } +.bi-music-player::before { content: "\f4a2"; } +.bi-newspaper::before { content: "\f4a3"; } +.bi-node-minus-fill::before { content: "\f4a4"; } +.bi-node-minus::before { content: "\f4a5"; } +.bi-node-plus-fill::before { content: "\f4a6"; } +.bi-node-plus::before { content: "\f4a7"; } +.bi-nut-fill::before { content: "\f4a8"; } +.bi-nut::before { content: "\f4a9"; } +.bi-octagon-fill::before { content: "\f4aa"; } +.bi-octagon-half::before { content: "\f4ab"; } +.bi-octagon::before { content: "\f4ac"; } +.bi-option::before { content: "\f4ad"; } +.bi-outlet::before { content: "\f4ae"; } +.bi-paint-bucket::before { content: "\f4af"; } +.bi-palette-fill::before { content: "\f4b0"; } +.bi-palette::before { content: "\f4b1"; } +.bi-palette2::before { content: "\f4b2"; } +.bi-paperclip::before { content: "\f4b3"; } +.bi-paragraph::before { content: "\f4b4"; } +.bi-patch-check-fill::before { content: "\f4b5"; } +.bi-patch-check::before { content: "\f4b6"; } +.bi-patch-exclamation-fill::before { content: "\f4b7"; } +.bi-patch-exclamation::before { content: "\f4b8"; } +.bi-patch-minus-fill::before { content: "\f4b9"; } +.bi-patch-minus::before { content: "\f4ba"; } +.bi-patch-plus-fill::before { content: "\f4bb"; } +.bi-patch-plus::before { content: "\f4bc"; } +.bi-patch-question-fill::before { content: "\f4bd"; } +.bi-patch-question::before { content: "\f4be"; } +.bi-pause-btn-fill::before { content: "\f4bf"; } +.bi-pause-btn::before { content: "\f4c0"; } +.bi-pause-circle-fill::before { content: "\f4c1"; } +.bi-pause-circle::before { content: "\f4c2"; } +.bi-pause-fill::before { content: "\f4c3"; } +.bi-pause::before { content: "\f4c4"; } +.bi-peace-fill::before { content: "\f4c5"; } +.bi-peace::before { content: "\f4c6"; } +.bi-pen-fill::before { content: "\f4c7"; } +.bi-pen::before { content: "\f4c8"; } +.bi-pencil-fill::before { content: "\f4c9"; } +.bi-pencil-square::before { content: "\f4ca"; } +.bi-pencil::before { content: "\f4cb"; } +.bi-pentagon-fill::before { content: "\f4cc"; } +.bi-pentagon-half::before { content: "\f4cd"; } +.bi-pentagon::before { content: "\f4ce"; } +.bi-people-fill::before { content: "\f4cf"; } +.bi-people::before { content: "\f4d0"; } +.bi-percent::before { content: "\f4d1"; } +.bi-person-badge-fill::before { content: "\f4d2"; } +.bi-person-badge::before { content: "\f4d3"; } +.bi-person-bounding-box::before { content: "\f4d4"; } +.bi-person-check-fill::before { content: "\f4d5"; } +.bi-person-check::before { content: "\f4d6"; } +.bi-person-circle::before { content: "\f4d7"; } +.bi-person-dash-fill::before { content: "\f4d8"; } +.bi-person-dash::before { content: "\f4d9"; } +.bi-person-fill::before { content: "\f4da"; } +.bi-person-lines-fill::before { content: "\f4db"; } +.bi-person-plus-fill::before { content: "\f4dc"; } +.bi-person-plus::before { content: "\f4dd"; } +.bi-person-square::before { content: "\f4de"; } +.bi-person-x-fill::before { content: "\f4df"; } +.bi-person-x::before { content: "\f4e0"; } +.bi-person::before { content: "\f4e1"; } +.bi-phone-fill::before { content: "\f4e2"; } +.bi-phone-landscape-fill::before { content: "\f4e3"; } +.bi-phone-landscape::before { content: "\f4e4"; } +.bi-phone-vibrate-fill::before { content: "\f4e5"; } +.bi-phone-vibrate::before { content: "\f4e6"; } +.bi-phone::before { content: "\f4e7"; } +.bi-pie-chart-fill::before { content: "\f4e8"; } +.bi-pie-chart::before { content: "\f4e9"; } +.bi-pin-angle-fill::before { content: "\f4ea"; } +.bi-pin-angle::before { content: "\f4eb"; } +.bi-pin-fill::before { content: "\f4ec"; } +.bi-pin::before { content: "\f4ed"; } +.bi-pip-fill::before { content: "\f4ee"; } +.bi-pip::before { content: "\f4ef"; } +.bi-play-btn-fill::before { content: "\f4f0"; } +.bi-play-btn::before { content: "\f4f1"; } +.bi-play-circle-fill::before { content: "\f4f2"; } +.bi-play-circle::before { content: "\f4f3"; } +.bi-play-fill::before { content: "\f4f4"; } +.bi-play::before { content: "\f4f5"; } +.bi-plug-fill::before { content: "\f4f6"; } +.bi-plug::before { content: "\f4f7"; } +.bi-plus-circle-dotted::before { content: "\f4f8"; } +.bi-plus-circle-fill::before { content: "\f4f9"; } +.bi-plus-circle::before { content: "\f4fa"; } +.bi-plus-square-dotted::before { content: "\f4fb"; } +.bi-plus-square-fill::before { content: "\f4fc"; } +.bi-plus-square::before { content: "\f4fd"; } +.bi-plus::before { content: "\f4fe"; } +.bi-power::before { content: "\f4ff"; } +.bi-printer-fill::before { content: "\f500"; } +.bi-printer::before { content: "\f501"; } +.bi-puzzle-fill::before { content: "\f502"; } +.bi-puzzle::before { content: "\f503"; } +.bi-question-circle-fill::before { content: "\f504"; } +.bi-question-circle::before { content: "\f505"; } +.bi-question-diamond-fill::before { content: "\f506"; } +.bi-question-diamond::before { content: "\f507"; } +.bi-question-octagon-fill::before { content: "\f508"; } +.bi-question-octagon::before { content: "\f509"; } +.bi-question-square-fill::before { content: "\f50a"; } +.bi-question-square::before { content: "\f50b"; } +.bi-question::before { content: "\f50c"; } +.bi-rainbow::before { content: "\f50d"; } +.bi-receipt-cutoff::before { content: "\f50e"; } +.bi-receipt::before { content: "\f50f"; } +.bi-reception-0::before { content: "\f510"; } +.bi-reception-1::before { content: "\f511"; } +.bi-reception-2::before { content: "\f512"; } +.bi-reception-3::before { content: "\f513"; } +.bi-reception-4::before { content: "\f514"; } +.bi-record-btn-fill::before { content: "\f515"; } +.bi-record-btn::before { content: "\f516"; } +.bi-record-circle-fill::before { content: "\f517"; } +.bi-record-circle::before { content: "\f518"; } +.bi-record-fill::before { content: "\f519"; } +.bi-record::before { content: "\f51a"; } +.bi-record2-fill::before { content: "\f51b"; } +.bi-record2::before { content: "\f51c"; } +.bi-reply-all-fill::before { content: "\f51d"; } +.bi-reply-all::before { content: "\f51e"; } +.bi-reply-fill::before { content: "\f51f"; } +.bi-reply::before { content: "\f520"; } +.bi-rss-fill::before { content: "\f521"; } +.bi-rss::before { content: "\f522"; } +.bi-rulers::before { content: "\f523"; } +.bi-save-fill::before { content: "\f524"; } +.bi-save::before { content: "\f525"; } +.bi-save2-fill::before { content: "\f526"; } +.bi-save2::before { content: "\f527"; } +.bi-scissors::before { content: "\f528"; } +.bi-screwdriver::before { content: "\f529"; } +.bi-search::before { content: "\f52a"; } +.bi-segmented-nav::before { content: "\f52b"; } +.bi-server::before { content: "\f52c"; } +.bi-share-fill::before { content: "\f52d"; } +.bi-share::before { content: "\f52e"; } +.bi-shield-check::before { content: "\f52f"; } +.bi-shield-exclamation::before { content: "\f530"; } +.bi-shield-fill-check::before { content: "\f531"; } +.bi-shield-fill-exclamation::before { content: "\f532"; } +.bi-shield-fill-minus::before { content: "\f533"; } +.bi-shield-fill-plus::before { content: "\f534"; } +.bi-shield-fill-x::before { content: "\f535"; } +.bi-shield-fill::before { content: "\f536"; } +.bi-shield-lock-fill::before { content: "\f537"; } +.bi-shield-lock::before { content: "\f538"; } +.bi-shield-minus::before { content: "\f539"; } +.bi-shield-plus::before { content: "\f53a"; } +.bi-shield-shaded::before { content: "\f53b"; } +.bi-shield-slash-fill::before { content: "\f53c"; } +.bi-shield-slash::before { content: "\f53d"; } +.bi-shield-x::before { content: "\f53e"; } +.bi-shield::before { content: "\f53f"; } +.bi-shift-fill::before { content: "\f540"; } +.bi-shift::before { content: "\f541"; } +.bi-shop-window::before { content: "\f542"; } +.bi-shop::before { content: "\f543"; } +.bi-shuffle::before { content: "\f544"; } +.bi-signpost-2-fill::before { content: "\f545"; } +.bi-signpost-2::before { content: "\f546"; } +.bi-signpost-fill::before { content: "\f547"; } +.bi-signpost-split-fill::before { content: "\f548"; } +.bi-signpost-split::before { content: "\f549"; } +.bi-signpost::before { content: "\f54a"; } +.bi-sim-fill::before { content: "\f54b"; } +.bi-sim::before { content: "\f54c"; } +.bi-skip-backward-btn-fill::before { content: "\f54d"; } +.bi-skip-backward-btn::before { content: "\f54e"; } +.bi-skip-backward-circle-fill::before { content: "\f54f"; } +.bi-skip-backward-circle::before { content: "\f550"; } +.bi-skip-backward-fill::before { content: "\f551"; } +.bi-skip-backward::before { content: "\f552"; } +.bi-skip-end-btn-fill::before { content: "\f553"; } +.bi-skip-end-btn::before { content: "\f554"; } +.bi-skip-end-circle-fill::before { content: "\f555"; } +.bi-skip-end-circle::before { content: "\f556"; } +.bi-skip-end-fill::before { content: "\f557"; } +.bi-skip-end::before { content: "\f558"; } +.bi-skip-forward-btn-fill::before { content: "\f559"; } +.bi-skip-forward-btn::before { content: "\f55a"; } +.bi-skip-forward-circle-fill::before { content: "\f55b"; } +.bi-skip-forward-circle::before { content: "\f55c"; } +.bi-skip-forward-fill::before { content: "\f55d"; } +.bi-skip-forward::before { content: "\f55e"; } +.bi-skip-start-btn-fill::before { content: "\f55f"; } +.bi-skip-start-btn::before { content: "\f560"; } +.bi-skip-start-circle-fill::before { content: "\f561"; } +.bi-skip-start-circle::before { content: "\f562"; } +.bi-skip-start-fill::before { content: "\f563"; } +.bi-skip-start::before { content: "\f564"; } +.bi-slack::before { content: "\f565"; } +.bi-slash-circle-fill::before { content: "\f566"; } +.bi-slash-circle::before { content: "\f567"; } +.bi-slash-square-fill::before { content: "\f568"; } +.bi-slash-square::before { content: "\f569"; } +.bi-slash::before { content: "\f56a"; } +.bi-sliders::before { content: "\f56b"; } +.bi-smartwatch::before { content: "\f56c"; } +.bi-snow::before { content: "\f56d"; } +.bi-snow2::before { content: "\f56e"; } +.bi-snow3::before { content: "\f56f"; } +.bi-sort-alpha-down-alt::before { content: "\f570"; } +.bi-sort-alpha-down::before { content: "\f571"; } +.bi-sort-alpha-up-alt::before { content: "\f572"; } +.bi-sort-alpha-up::before { content: "\f573"; } +.bi-sort-down-alt::before { content: "\f574"; } +.bi-sort-down::before { content: "\f575"; } +.bi-sort-numeric-down-alt::before { content: "\f576"; } +.bi-sort-numeric-down::before { content: "\f577"; } +.bi-sort-numeric-up-alt::before { content: "\f578"; } +.bi-sort-numeric-up::before { content: "\f579"; } +.bi-sort-up-alt::before { content: "\f57a"; } +.bi-sort-up::before { content: "\f57b"; } +.bi-soundwave::before { content: "\f57c"; } +.bi-speaker-fill::before { content: "\f57d"; } +.bi-speaker::before { content: "\f57e"; } +.bi-speedometer::before { content: "\f57f"; } +.bi-speedometer2::before { content: "\f580"; } +.bi-spellcheck::before { content: "\f581"; } +.bi-square-fill::before { content: "\f582"; } +.bi-square-half::before { content: "\f583"; } +.bi-square::before { content: "\f584"; } +.bi-stack::before { content: "\f585"; } +.bi-star-fill::before { content: "\f586"; } +.bi-star-half::before { content: "\f587"; } +.bi-star::before { content: "\f588"; } +.bi-stars::before { content: "\f589"; } +.bi-stickies-fill::before { content: "\f58a"; } +.bi-stickies::before { content: "\f58b"; } +.bi-sticky-fill::before { content: "\f58c"; } +.bi-sticky::before { content: "\f58d"; } +.bi-stop-btn-fill::before { content: "\f58e"; } +.bi-stop-btn::before { content: "\f58f"; } +.bi-stop-circle-fill::before { content: "\f590"; } +.bi-stop-circle::before { content: "\f591"; } +.bi-stop-fill::before { content: "\f592"; } +.bi-stop::before { content: "\f593"; } +.bi-stoplights-fill::before { content: "\f594"; } +.bi-stoplights::before { content: "\f595"; } +.bi-stopwatch-fill::before { content: "\f596"; } +.bi-stopwatch::before { content: "\f597"; } +.bi-subtract::before { content: "\f598"; } +.bi-suit-club-fill::before { content: "\f599"; } +.bi-suit-club::before { content: "\f59a"; } +.bi-suit-diamond-fill::before { content: "\f59b"; } +.bi-suit-diamond::before { content: "\f59c"; } +.bi-suit-heart-fill::before { content: "\f59d"; } +.bi-suit-heart::before { content: "\f59e"; } +.bi-suit-spade-fill::before { content: "\f59f"; } +.bi-suit-spade::before { content: "\f5a0"; } +.bi-sun-fill::before { content: "\f5a1"; } +.bi-sun::before { content: "\f5a2"; } +.bi-sunglasses::before { content: "\f5a3"; } +.bi-sunrise-fill::before { content: "\f5a4"; } +.bi-sunrise::before { content: "\f5a5"; } +.bi-sunset-fill::before { content: "\f5a6"; } +.bi-sunset::before { content: "\f5a7"; } +.bi-symmetry-horizontal::before { content: "\f5a8"; } +.bi-symmetry-vertical::before { content: "\f5a9"; } +.bi-table::before { content: "\f5aa"; } +.bi-tablet-fill::before { content: "\f5ab"; } +.bi-tablet-landscape-fill::before { content: "\f5ac"; } +.bi-tablet-landscape::before { content: "\f5ad"; } +.bi-tablet::before { content: "\f5ae"; } +.bi-tag-fill::before { content: "\f5af"; } +.bi-tag::before { content: "\f5b0"; } +.bi-tags-fill::before { content: "\f5b1"; } +.bi-tags::before { content: "\f5b2"; } +.bi-telegram::before { content: "\f5b3"; } +.bi-telephone-fill::before { content: "\f5b4"; } +.bi-telephone-forward-fill::before { content: "\f5b5"; } +.bi-telephone-forward::before { content: "\f5b6"; } +.bi-telephone-inbound-fill::before { content: "\f5b7"; } +.bi-telephone-inbound::before { content: "\f5b8"; } +.bi-telephone-minus-fill::before { content: "\f5b9"; } +.bi-telephone-minus::before { content: "\f5ba"; } +.bi-telephone-outbound-fill::before { content: "\f5bb"; } +.bi-telephone-outbound::before { content: "\f5bc"; } +.bi-telephone-plus-fill::before { content: "\f5bd"; } +.bi-telephone-plus::before { content: "\f5be"; } +.bi-telephone-x-fill::before { content: "\f5bf"; } +.bi-telephone-x::before { content: "\f5c0"; } +.bi-telephone::before { content: "\f5c1"; } +.bi-terminal-fill::before { content: "\f5c2"; } +.bi-terminal::before { content: "\f5c3"; } +.bi-text-center::before { content: "\f5c4"; } +.bi-text-indent-left::before { content: "\f5c5"; } +.bi-text-indent-right::before { content: "\f5c6"; } +.bi-text-left::before { content: "\f5c7"; } +.bi-text-paragraph::before { content: "\f5c8"; } +.bi-text-right::before { content: "\f5c9"; } +.bi-textarea-resize::before { content: "\f5ca"; } +.bi-textarea-t::before { content: "\f5cb"; } +.bi-textarea::before { content: "\f5cc"; } +.bi-thermometer-half::before { content: "\f5cd"; } +.bi-thermometer-high::before { content: "\f5ce"; } +.bi-thermometer-low::before { content: "\f5cf"; } +.bi-thermometer-snow::before { content: "\f5d0"; } +.bi-thermometer-sun::before { content: "\f5d1"; } +.bi-thermometer::before { content: "\f5d2"; } +.bi-three-dots-vertical::before { content: "\f5d3"; } +.bi-three-dots::before { content: "\f5d4"; } +.bi-toggle-off::before { content: "\f5d5"; } +.bi-toggle-on::before { content: "\f5d6"; } +.bi-toggle2-off::before { content: "\f5d7"; } +.bi-toggle2-on::before { content: "\f5d8"; } +.bi-toggles::before { content: "\f5d9"; } +.bi-toggles2::before { content: "\f5da"; } +.bi-tools::before { content: "\f5db"; } +.bi-tornado::before { content: "\f5dc"; } +.bi-trash-fill::before { content: "\f5dd"; } +.bi-trash::before { content: "\f5de"; } +.bi-trash2-fill::before { content: "\f5df"; } +.bi-trash2::before { content: "\f5e0"; } +.bi-tree-fill::before { content: "\f5e1"; } +.bi-tree::before { content: "\f5e2"; } +.bi-triangle-fill::before { content: "\f5e3"; } +.bi-triangle-half::before { content: "\f5e4"; } +.bi-triangle::before { content: "\f5e5"; } +.bi-trophy-fill::before { content: "\f5e6"; } +.bi-trophy::before { content: "\f5e7"; } +.bi-tropical-storm::before { content: "\f5e8"; } +.bi-truck-flatbed::before { content: "\f5e9"; } +.bi-truck::before { content: "\f5ea"; } +.bi-tsunami::before { content: "\f5eb"; } +.bi-tv-fill::before { content: "\f5ec"; } +.bi-tv::before { content: "\f5ed"; } +.bi-twitch::before { content: "\f5ee"; } +.bi-twitter::before { content: "\f5ef"; } +.bi-type-bold::before { content: "\f5f0"; } +.bi-type-h1::before { content: "\f5f1"; } +.bi-type-h2::before { content: "\f5f2"; } +.bi-type-h3::before { content: "\f5f3"; } +.bi-type-italic::before { content: "\f5f4"; } +.bi-type-strikethrough::before { content: "\f5f5"; } +.bi-type-underline::before { content: "\f5f6"; } +.bi-type::before { content: "\f5f7"; } +.bi-ui-checks-grid::before { content: "\f5f8"; } +.bi-ui-checks::before { content: "\f5f9"; } +.bi-ui-radios-grid::before { content: "\f5fa"; } +.bi-ui-radios::before { content: "\f5fb"; } +.bi-umbrella-fill::before { content: "\f5fc"; } +.bi-umbrella::before { content: "\f5fd"; } +.bi-union::before { content: "\f5fe"; } +.bi-unlock-fill::before { content: "\f5ff"; } +.bi-unlock::before { content: "\f600"; } +.bi-upc-scan::before { content: "\f601"; } +.bi-upc::before { content: "\f602"; } +.bi-upload::before { content: "\f603"; } +.bi-vector-pen::before { content: "\f604"; } +.bi-view-list::before { content: "\f605"; } +.bi-view-stacked::before { content: "\f606"; } +.bi-vinyl-fill::before { content: "\f607"; } +.bi-vinyl::before { content: "\f608"; } +.bi-voicemail::before { content: "\f609"; } +.bi-volume-down-fill::before { content: "\f60a"; } +.bi-volume-down::before { content: "\f60b"; } +.bi-volume-mute-fill::before { content: "\f60c"; } +.bi-volume-mute::before { content: "\f60d"; } +.bi-volume-off-fill::before { content: "\f60e"; } +.bi-volume-off::before { content: "\f60f"; } +.bi-volume-up-fill::before { content: "\f610"; } +.bi-volume-up::before { content: "\f611"; } +.bi-vr::before { content: "\f612"; } +.bi-wallet-fill::before { content: "\f613"; } +.bi-wallet::before { content: "\f614"; } +.bi-wallet2::before { content: "\f615"; } +.bi-watch::before { content: "\f616"; } +.bi-water::before { content: "\f617"; } +.bi-whatsapp::before { content: "\f618"; } +.bi-wifi-1::before { content: "\f619"; } +.bi-wifi-2::before { content: "\f61a"; } +.bi-wifi-off::before { content: "\f61b"; } +.bi-wifi::before { content: "\f61c"; } +.bi-wind::before { content: "\f61d"; } +.bi-window-dock::before { content: "\f61e"; } +.bi-window-sidebar::before { content: "\f61f"; } +.bi-window::before { content: "\f620"; } +.bi-wrench::before { content: "\f621"; } +.bi-x-circle-fill::before { content: "\f622"; } +.bi-x-circle::before { content: "\f623"; } +.bi-x-diamond-fill::before { content: "\f624"; } +.bi-x-diamond::before { content: "\f625"; } +.bi-x-octagon-fill::before { content: "\f626"; } +.bi-x-octagon::before { content: "\f627"; } +.bi-x-square-fill::before { content: "\f628"; } +.bi-x-square::before { content: "\f629"; } +.bi-x::before { content: "\f62a"; } +.bi-youtube::before { content: "\f62b"; } +.bi-zoom-in::before { content: "\f62c"; } +.bi-zoom-out::before { content: "\f62d"; } +.bi-bank::before { content: "\f62e"; } +.bi-bank2::before { content: "\f62f"; } +.bi-bell-slash-fill::before { content: "\f630"; } +.bi-bell-slash::before { content: "\f631"; } +.bi-cash-coin::before { content: "\f632"; } +.bi-check-lg::before { content: "\f633"; } +.bi-coin::before { content: "\f634"; } +.bi-currency-bitcoin::before { content: "\f635"; } +.bi-currency-dollar::before { content: "\f636"; } +.bi-currency-euro::before { content: "\f637"; } +.bi-currency-exchange::before { content: "\f638"; } +.bi-currency-pound::before { content: "\f639"; } +.bi-currency-yen::before { content: "\f63a"; } +.bi-dash-lg::before { content: "\f63b"; } +.bi-exclamation-lg::before { content: "\f63c"; } +.bi-file-earmark-pdf-fill::before { content: "\f63d"; } +.bi-file-earmark-pdf::before { content: "\f63e"; } +.bi-file-pdf-fill::before { content: "\f63f"; } +.bi-file-pdf::before { content: "\f640"; } +.bi-gender-ambiguous::before { content: "\f641"; } +.bi-gender-female::before { content: "\f642"; } +.bi-gender-male::before { content: "\f643"; } +.bi-gender-trans::before { content: "\f644"; } +.bi-headset-vr::before { content: "\f645"; } +.bi-info-lg::before { content: "\f646"; } +.bi-mastodon::before { content: "\f647"; } +.bi-messenger::before { content: "\f648"; } +.bi-piggy-bank-fill::before { content: "\f649"; } +.bi-piggy-bank::before { content: "\f64a"; } +.bi-pin-map-fill::before { content: "\f64b"; } +.bi-pin-map::before { content: "\f64c"; } +.bi-plus-lg::before { content: "\f64d"; } +.bi-question-lg::before { content: "\f64e"; } +.bi-recycle::before { content: "\f64f"; } +.bi-reddit::before { content: "\f650"; } +.bi-safe-fill::before { content: "\f651"; } +.bi-safe2-fill::before { content: "\f652"; } +.bi-safe2::before { content: "\f653"; } +.bi-sd-card-fill::before { content: "\f654"; } +.bi-sd-card::before { content: "\f655"; } +.bi-skype::before { content: "\f656"; } +.bi-slash-lg::before { content: "\f657"; } +.bi-translate::before { content: "\f658"; } +.bi-x-lg::before { content: "\f659"; } +.bi-safe::before { content: "\f65a"; } +.bi-apple::before { content: "\f65b"; } +.bi-microsoft::before { content: "\f65d"; } +.bi-windows::before { content: "\f65e"; } +.bi-behance::before { content: "\f65c"; } +.bi-dribbble::before { content: "\f65f"; } +.bi-line::before { content: "\f660"; } +.bi-medium::before { content: "\f661"; } +.bi-paypal::before { content: "\f662"; } +.bi-pinterest::before { content: "\f663"; } +.bi-signal::before { content: "\f664"; } +.bi-snapchat::before { content: "\f665"; } +.bi-spotify::before { content: "\f666"; } +.bi-stack-overflow::before { content: "\f667"; } +.bi-strava::before { content: "\f668"; } +.bi-wordpress::before { content: "\f669"; } +.bi-vimeo::before { content: "\f66a"; } +.bi-activity::before { content: "\f66b"; } +.bi-easel2-fill::before { content: "\f66c"; } +.bi-easel2::before { content: "\f66d"; } +.bi-easel3-fill::before { content: "\f66e"; } +.bi-easel3::before { content: "\f66f"; } +.bi-fan::before { content: "\f670"; } +.bi-fingerprint::before { content: "\f671"; } +.bi-graph-down-arrow::before { content: "\f672"; } +.bi-graph-up-arrow::before { content: "\f673"; } +.bi-hypnotize::before { content: "\f674"; } +.bi-magic::before { content: "\f675"; } +.bi-person-rolodex::before { content: "\f676"; } +.bi-person-video::before { content: "\f677"; } +.bi-person-video2::before { content: "\f678"; } +.bi-person-video3::before { content: "\f679"; } +.bi-person-workspace::before { content: "\f67a"; } +.bi-radioactive::before { content: "\f67b"; } +.bi-webcam-fill::before { content: "\f67c"; } +.bi-webcam::before { content: "\f67d"; } +.bi-yin-yang::before { content: "\f67e"; } +.bi-bandaid-fill::before { content: "\f680"; } +.bi-bandaid::before { content: "\f681"; } +.bi-bluetooth::before { content: "\f682"; } +.bi-body-text::before { content: "\f683"; } +.bi-boombox::before { content: "\f684"; } +.bi-boxes::before { content: "\f685"; } +.bi-dpad-fill::before { content: "\f686"; } +.bi-dpad::before { content: "\f687"; } +.bi-ear-fill::before { content: "\f688"; } +.bi-ear::before { content: "\f689"; } +.bi-envelope-check-fill::before { content: "\f68b"; } +.bi-envelope-check::before { content: "\f68c"; } +.bi-envelope-dash-fill::before { content: "\f68e"; } +.bi-envelope-dash::before { content: "\f68f"; } +.bi-envelope-exclamation-fill::before { content: "\f691"; } +.bi-envelope-exclamation::before { content: "\f692"; } +.bi-envelope-plus-fill::before { content: "\f693"; } +.bi-envelope-plus::before { content: "\f694"; } +.bi-envelope-slash-fill::before { content: "\f696"; } +.bi-envelope-slash::before { content: "\f697"; } +.bi-envelope-x-fill::before { content: "\f699"; } +.bi-envelope-x::before { content: "\f69a"; } +.bi-explicit-fill::before { content: "\f69b"; } +.bi-explicit::before { content: "\f69c"; } +.bi-git::before { content: "\f69d"; } +.bi-infinity::before { content: "\f69e"; } +.bi-list-columns-reverse::before { content: "\f69f"; } +.bi-list-columns::before { content: "\f6a0"; } +.bi-meta::before { content: "\f6a1"; } +.bi-nintendo-switch::before { content: "\f6a4"; } +.bi-pc-display-horizontal::before { content: "\f6a5"; } +.bi-pc-display::before { content: "\f6a6"; } +.bi-pc-horizontal::before { content: "\f6a7"; } +.bi-pc::before { content: "\f6a8"; } +.bi-playstation::before { content: "\f6a9"; } +.bi-plus-slash-minus::before { content: "\f6aa"; } +.bi-projector-fill::before { content: "\f6ab"; } +.bi-projector::before { content: "\f6ac"; } +.bi-qr-code-scan::before { content: "\f6ad"; } +.bi-qr-code::before { content: "\f6ae"; } +.bi-quora::before { content: "\f6af"; } +.bi-quote::before { content: "\f6b0"; } +.bi-robot::before { content: "\f6b1"; } +.bi-send-check-fill::before { content: "\f6b2"; } +.bi-send-check::before { content: "\f6b3"; } +.bi-send-dash-fill::before { content: "\f6b4"; } +.bi-send-dash::before { content: "\f6b5"; } +.bi-send-exclamation-fill::before { content: "\f6b7"; } +.bi-send-exclamation::before { content: "\f6b8"; } +.bi-send-fill::before { content: "\f6b9"; } +.bi-send-plus-fill::before { content: "\f6ba"; } +.bi-send-plus::before { content: "\f6bb"; } +.bi-send-slash-fill::before { content: "\f6bc"; } +.bi-send-slash::before { content: "\f6bd"; } +.bi-send-x-fill::before { content: "\f6be"; } +.bi-send-x::before { content: "\f6bf"; } +.bi-send::before { content: "\f6c0"; } +.bi-steam::before { content: "\f6c1"; } +.bi-terminal-dash::before { content: "\f6c3"; } +.bi-terminal-plus::before { content: "\f6c4"; } +.bi-terminal-split::before { content: "\f6c5"; } +.bi-ticket-detailed-fill::before { content: "\f6c6"; } +.bi-ticket-detailed::before { content: "\f6c7"; } +.bi-ticket-fill::before { content: "\f6c8"; } +.bi-ticket-perforated-fill::before { content: "\f6c9"; } +.bi-ticket-perforated::before { content: "\f6ca"; } +.bi-ticket::before { content: "\f6cb"; } +.bi-tiktok::before { content: "\f6cc"; } +.bi-window-dash::before { content: "\f6cd"; } +.bi-window-desktop::before { content: "\f6ce"; } +.bi-window-fullscreen::before { content: "\f6cf"; } +.bi-window-plus::before { content: "\f6d0"; } +.bi-window-split::before { content: "\f6d1"; } +.bi-window-stack::before { content: "\f6d2"; } +.bi-window-x::before { content: "\f6d3"; } +.bi-xbox::before { content: "\f6d4"; } +.bi-ethernet::before { content: "\f6d5"; } +.bi-hdmi-fill::before { content: "\f6d6"; } +.bi-hdmi::before { content: "\f6d7"; } +.bi-usb-c-fill::before { content: "\f6d8"; } +.bi-usb-c::before { content: "\f6d9"; } +.bi-usb-fill::before { content: "\f6da"; } +.bi-usb-plug-fill::before { content: "\f6db"; } +.bi-usb-plug::before { content: "\f6dc"; } +.bi-usb-symbol::before { content: "\f6dd"; } +.bi-usb::before { content: "\f6de"; } +.bi-boombox-fill::before { content: "\f6df"; } +.bi-displayport::before { content: "\f6e1"; } +.bi-gpu-card::before { content: "\f6e2"; } +.bi-memory::before { content: "\f6e3"; } +.bi-modem-fill::before { content: "\f6e4"; } +.bi-modem::before { content: "\f6e5"; } +.bi-motherboard-fill::before { content: "\f6e6"; } +.bi-motherboard::before { content: "\f6e7"; } +.bi-optical-audio-fill::before { content: "\f6e8"; } +.bi-optical-audio::before { content: "\f6e9"; } +.bi-pci-card::before { content: "\f6ea"; } +.bi-router-fill::before { content: "\f6eb"; } +.bi-router::before { content: "\f6ec"; } +.bi-thunderbolt-fill::before { content: "\f6ef"; } +.bi-thunderbolt::before { content: "\f6f0"; } +.bi-usb-drive-fill::before { content: "\f6f1"; } +.bi-usb-drive::before { content: "\f6f2"; } +.bi-usb-micro-fill::before { content: "\f6f3"; } +.bi-usb-micro::before { content: "\f6f4"; } +.bi-usb-mini-fill::before { content: "\f6f5"; } +.bi-usb-mini::before { content: "\f6f6"; } +.bi-cloud-haze2::before { content: "\f6f7"; } +.bi-device-hdd-fill::before { content: "\f6f8"; } +.bi-device-hdd::before { content: "\f6f9"; } +.bi-device-ssd-fill::before { content: "\f6fa"; } +.bi-device-ssd::before { content: "\f6fb"; } +.bi-displayport-fill::before { content: "\f6fc"; } +.bi-mortarboard-fill::before { content: "\f6fd"; } +.bi-mortarboard::before { content: "\f6fe"; } +.bi-terminal-x::before { content: "\f6ff"; } +.bi-arrow-through-heart-fill::before { content: "\f700"; } +.bi-arrow-through-heart::before { content: "\f701"; } +.bi-badge-sd-fill::before { content: "\f702"; } +.bi-badge-sd::before { content: "\f703"; } +.bi-bag-heart-fill::before { content: "\f704"; } +.bi-bag-heart::before { content: "\f705"; } +.bi-balloon-fill::before { content: "\f706"; } +.bi-balloon-heart-fill::before { content: "\f707"; } +.bi-balloon-heart::before { content: "\f708"; } +.bi-balloon::before { content: "\f709"; } +.bi-box2-fill::before { content: "\f70a"; } +.bi-box2-heart-fill::before { content: "\f70b"; } +.bi-box2-heart::before { content: "\f70c"; } +.bi-box2::before { content: "\f70d"; } +.bi-braces-asterisk::before { content: "\f70e"; } +.bi-calendar-heart-fill::before { content: "\f70f"; } +.bi-calendar-heart::before { content: "\f710"; } +.bi-calendar2-heart-fill::before { content: "\f711"; } +.bi-calendar2-heart::before { content: "\f712"; } +.bi-chat-heart-fill::before { content: "\f713"; } +.bi-chat-heart::before { content: "\f714"; } +.bi-chat-left-heart-fill::before { content: "\f715"; } +.bi-chat-left-heart::before { content: "\f716"; } +.bi-chat-right-heart-fill::before { content: "\f717"; } +.bi-chat-right-heart::before { content: "\f718"; } +.bi-chat-square-heart-fill::before { content: "\f719"; } +.bi-chat-square-heart::before { content: "\f71a"; } +.bi-clipboard-check-fill::before { content: "\f71b"; } +.bi-clipboard-data-fill::before { content: "\f71c"; } +.bi-clipboard-fill::before { content: "\f71d"; } +.bi-clipboard-heart-fill::before { content: "\f71e"; } +.bi-clipboard-heart::before { content: "\f71f"; } +.bi-clipboard-minus-fill::before { content: "\f720"; } +.bi-clipboard-plus-fill::before { content: "\f721"; } +.bi-clipboard-pulse::before { content: "\f722"; } +.bi-clipboard-x-fill::before { content: "\f723"; } +.bi-clipboard2-check-fill::before { content: "\f724"; } +.bi-clipboard2-check::before { content: "\f725"; } +.bi-clipboard2-data-fill::before { content: "\f726"; } +.bi-clipboard2-data::before { content: "\f727"; } +.bi-clipboard2-fill::before { content: "\f728"; } +.bi-clipboard2-heart-fill::before { content: "\f729"; } +.bi-clipboard2-heart::before { content: "\f72a"; } +.bi-clipboard2-minus-fill::before { content: "\f72b"; } +.bi-clipboard2-minus::before { content: "\f72c"; } +.bi-clipboard2-plus-fill::before { content: "\f72d"; } +.bi-clipboard2-plus::before { content: "\f72e"; } +.bi-clipboard2-pulse-fill::before { content: "\f72f"; } +.bi-clipboard2-pulse::before { content: "\f730"; } +.bi-clipboard2-x-fill::before { content: "\f731"; } +.bi-clipboard2-x::before { content: "\f732"; } +.bi-clipboard2::before { content: "\f733"; } +.bi-emoji-kiss-fill::before { content: "\f734"; } +.bi-emoji-kiss::before { content: "\f735"; } +.bi-envelope-heart-fill::before { content: "\f736"; } +.bi-envelope-heart::before { content: "\f737"; } +.bi-envelope-open-heart-fill::before { content: "\f738"; } +.bi-envelope-open-heart::before { content: "\f739"; } +.bi-envelope-paper-fill::before { content: "\f73a"; } +.bi-envelope-paper-heart-fill::before { content: "\f73b"; } +.bi-envelope-paper-heart::before { content: "\f73c"; } +.bi-envelope-paper::before { content: "\f73d"; } +.bi-filetype-aac::before { content: "\f73e"; } +.bi-filetype-ai::before { content: "\f73f"; } +.bi-filetype-bmp::before { content: "\f740"; } +.bi-filetype-cs::before { content: "\f741"; } +.bi-filetype-css::before { content: "\f742"; } +.bi-filetype-csv::before { content: "\f743"; } +.bi-filetype-doc::before { content: "\f744"; } +.bi-filetype-docx::before { content: "\f745"; } +.bi-filetype-exe::before { content: "\f746"; } +.bi-filetype-gif::before { content: "\f747"; } +.bi-filetype-heic::before { content: "\f748"; } +.bi-filetype-html::before { content: "\f749"; } +.bi-filetype-java::before { content: "\f74a"; } +.bi-filetype-jpg::before { content: "\f74b"; } +.bi-filetype-js::before { content: "\f74c"; } +.bi-filetype-jsx::before { content: "\f74d"; } +.bi-filetype-key::before { content: "\f74e"; } +.bi-filetype-m4p::before { content: "\f74f"; } +.bi-filetype-md::before { content: "\f750"; } +.bi-filetype-mdx::before { content: "\f751"; } +.bi-filetype-mov::before { content: "\f752"; } +.bi-filetype-mp3::before { content: "\f753"; } +.bi-filetype-mp4::before { content: "\f754"; } +.bi-filetype-otf::before { content: "\f755"; } +.bi-filetype-pdf::before { content: "\f756"; } +.bi-filetype-php::before { content: "\f757"; } +.bi-filetype-png::before { content: "\f758"; } +.bi-filetype-ppt::before { content: "\f75a"; } +.bi-filetype-psd::before { content: "\f75b"; } +.bi-filetype-py::before { content: "\f75c"; } +.bi-filetype-raw::before { content: "\f75d"; } +.bi-filetype-rb::before { content: "\f75e"; } +.bi-filetype-sass::before { content: "\f75f"; } +.bi-filetype-scss::before { content: "\f760"; } +.bi-filetype-sh::before { content: "\f761"; } +.bi-filetype-svg::before { content: "\f762"; } +.bi-filetype-tiff::before { content: "\f763"; } +.bi-filetype-tsx::before { content: "\f764"; } +.bi-filetype-ttf::before { content: "\f765"; } +.bi-filetype-txt::before { content: "\f766"; } +.bi-filetype-wav::before { content: "\f767"; } +.bi-filetype-woff::before { content: "\f768"; } +.bi-filetype-xls::before { content: "\f76a"; } +.bi-filetype-xml::before { content: "\f76b"; } +.bi-filetype-yml::before { content: "\f76c"; } +.bi-heart-arrow::before { content: "\f76d"; } +.bi-heart-pulse-fill::before { content: "\f76e"; } +.bi-heart-pulse::before { content: "\f76f"; } +.bi-heartbreak-fill::before { content: "\f770"; } +.bi-heartbreak::before { content: "\f771"; } +.bi-hearts::before { content: "\f772"; } +.bi-hospital-fill::before { content: "\f773"; } +.bi-hospital::before { content: "\f774"; } +.bi-house-heart-fill::before { content: "\f775"; } +.bi-house-heart::before { content: "\f776"; } +.bi-incognito::before { content: "\f777"; } +.bi-magnet-fill::before { content: "\f778"; } +.bi-magnet::before { content: "\f779"; } +.bi-person-heart::before { content: "\f77a"; } +.bi-person-hearts::before { content: "\f77b"; } +.bi-phone-flip::before { content: "\f77c"; } +.bi-plugin::before { content: "\f77d"; } +.bi-postage-fill::before { content: "\f77e"; } +.bi-postage-heart-fill::before { content: "\f77f"; } +.bi-postage-heart::before { content: "\f780"; } +.bi-postage::before { content: "\f781"; } +.bi-postcard-fill::before { content: "\f782"; } +.bi-postcard-heart-fill::before { content: "\f783"; } +.bi-postcard-heart::before { content: "\f784"; } +.bi-postcard::before { content: "\f785"; } +.bi-search-heart-fill::before { content: "\f786"; } +.bi-search-heart::before { content: "\f787"; } +.bi-sliders2-vertical::before { content: "\f788"; } +.bi-sliders2::before { content: "\f789"; } +.bi-trash3-fill::before { content: "\f78a"; } +.bi-trash3::before { content: "\f78b"; } +.bi-valentine::before { content: "\f78c"; } +.bi-valentine2::before { content: "\f78d"; } +.bi-wrench-adjustable-circle-fill::before { content: "\f78e"; } +.bi-wrench-adjustable-circle::before { content: "\f78f"; } +.bi-wrench-adjustable::before { content: "\f790"; } +.bi-filetype-json::before { content: "\f791"; } +.bi-filetype-pptx::before { content: "\f792"; } +.bi-filetype-xlsx::before { content: "\f793"; } +.bi-1-circle-fill::before { content: "\f796"; } +.bi-1-circle::before { content: "\f797"; } +.bi-1-square-fill::before { content: "\f798"; } +.bi-1-square::before { content: "\f799"; } +.bi-2-circle-fill::before { content: "\f79c"; } +.bi-2-circle::before { content: "\f79d"; } +.bi-2-square-fill::before { content: "\f79e"; } +.bi-2-square::before { content: "\f79f"; } +.bi-3-circle-fill::before { content: "\f7a2"; } +.bi-3-circle::before { content: "\f7a3"; } +.bi-3-square-fill::before { content: "\f7a4"; } +.bi-3-square::before { content: "\f7a5"; } +.bi-4-circle-fill::before { content: "\f7a8"; } +.bi-4-circle::before { content: "\f7a9"; } +.bi-4-square-fill::before { content: "\f7aa"; } +.bi-4-square::before { content: "\f7ab"; } +.bi-5-circle-fill::before { content: "\f7ae"; } +.bi-5-circle::before { content: "\f7af"; } +.bi-5-square-fill::before { content: "\f7b0"; } +.bi-5-square::before { content: "\f7b1"; } +.bi-6-circle-fill::before { content: "\f7b4"; } +.bi-6-circle::before { content: "\f7b5"; } +.bi-6-square-fill::before { content: "\f7b6"; } +.bi-6-square::before { content: "\f7b7"; } +.bi-7-circle-fill::before { content: "\f7ba"; } +.bi-7-circle::before { content: "\f7bb"; } +.bi-7-square-fill::before { content: "\f7bc"; } +.bi-7-square::before { content: "\f7bd"; } +.bi-8-circle-fill::before { content: "\f7c0"; } +.bi-8-circle::before { content: "\f7c1"; } +.bi-8-square-fill::before { content: "\f7c2"; } +.bi-8-square::before { content: "\f7c3"; } +.bi-9-circle-fill::before { content: "\f7c6"; } +.bi-9-circle::before { content: "\f7c7"; } +.bi-9-square-fill::before { content: "\f7c8"; } +.bi-9-square::before { content: "\f7c9"; } +.bi-airplane-engines-fill::before { content: "\f7ca"; } +.bi-airplane-engines::before { content: "\f7cb"; } +.bi-airplane-fill::before { content: "\f7cc"; } +.bi-airplane::before { content: "\f7cd"; } +.bi-alexa::before { content: "\f7ce"; } +.bi-alipay::before { content: "\f7cf"; } +.bi-android::before { content: "\f7d0"; } +.bi-android2::before { content: "\f7d1"; } +.bi-box-fill::before { content: "\f7d2"; } +.bi-box-seam-fill::before { content: "\f7d3"; } +.bi-browser-chrome::before { content: "\f7d4"; } +.bi-browser-edge::before { content: "\f7d5"; } +.bi-browser-firefox::before { content: "\f7d6"; } +.bi-browser-safari::before { content: "\f7d7"; } +.bi-c-circle-fill::before { content: "\f7da"; } +.bi-c-circle::before { content: "\f7db"; } +.bi-c-square-fill::before { content: "\f7dc"; } +.bi-c-square::before { content: "\f7dd"; } +.bi-capsule-pill::before { content: "\f7de"; } +.bi-capsule::before { content: "\f7df"; } +.bi-car-front-fill::before { content: "\f7e0"; } +.bi-car-front::before { content: "\f7e1"; } +.bi-cassette-fill::before { content: "\f7e2"; } +.bi-cassette::before { content: "\f7e3"; } +.bi-cc-circle-fill::before { content: "\f7e6"; } +.bi-cc-circle::before { content: "\f7e7"; } +.bi-cc-square-fill::before { content: "\f7e8"; } +.bi-cc-square::before { content: "\f7e9"; } +.bi-cup-hot-fill::before { content: "\f7ea"; } +.bi-cup-hot::before { content: "\f7eb"; } +.bi-currency-rupee::before { content: "\f7ec"; } +.bi-dropbox::before { content: "\f7ed"; } +.bi-escape::before { content: "\f7ee"; } +.bi-fast-forward-btn-fill::before { content: "\f7ef"; } +.bi-fast-forward-btn::before { content: "\f7f0"; } +.bi-fast-forward-circle-fill::before { content: "\f7f1"; } +.bi-fast-forward-circle::before { content: "\f7f2"; } +.bi-fast-forward-fill::before { content: "\f7f3"; } +.bi-fast-forward::before { content: "\f7f4"; } +.bi-filetype-sql::before { content: "\f7f5"; } +.bi-fire::before { content: "\f7f6"; } +.bi-google-play::before { content: "\f7f7"; } +.bi-h-circle-fill::before { content: "\f7fa"; } +.bi-h-circle::before { content: "\f7fb"; } +.bi-h-square-fill::before { content: "\f7fc"; } +.bi-h-square::before { content: "\f7fd"; } +.bi-indent::before { content: "\f7fe"; } +.bi-lungs-fill::before { content: "\f7ff"; } +.bi-lungs::before { content: "\f800"; } +.bi-microsoft-teams::before { content: "\f801"; } +.bi-p-circle-fill::before { content: "\f804"; } +.bi-p-circle::before { content: "\f805"; } +.bi-p-square-fill::before { content: "\f806"; } +.bi-p-square::before { content: "\f807"; } +.bi-pass-fill::before { content: "\f808"; } +.bi-pass::before { content: "\f809"; } +.bi-prescription::before { content: "\f80a"; } +.bi-prescription2::before { content: "\f80b"; } +.bi-r-circle-fill::before { content: "\f80e"; } +.bi-r-circle::before { content: "\f80f"; } +.bi-r-square-fill::before { content: "\f810"; } +.bi-r-square::before { content: "\f811"; } +.bi-repeat-1::before { content: "\f812"; } +.bi-repeat::before { content: "\f813"; } +.bi-rewind-btn-fill::before { content: "\f814"; } +.bi-rewind-btn::before { content: "\f815"; } +.bi-rewind-circle-fill::before { content: "\f816"; } +.bi-rewind-circle::before { content: "\f817"; } +.bi-rewind-fill::before { content: "\f818"; } +.bi-rewind::before { content: "\f819"; } +.bi-train-freight-front-fill::before { content: "\f81a"; } +.bi-train-freight-front::before { content: "\f81b"; } +.bi-train-front-fill::before { content: "\f81c"; } +.bi-train-front::before { content: "\f81d"; } +.bi-train-lightrail-front-fill::before { content: "\f81e"; } +.bi-train-lightrail-front::before { content: "\f81f"; } +.bi-truck-front-fill::before { content: "\f820"; } +.bi-truck-front::before { content: "\f821"; } +.bi-ubuntu::before { content: "\f822"; } +.bi-unindent::before { content: "\f823"; } +.bi-unity::before { content: "\f824"; } +.bi-universal-access-circle::before { content: "\f825"; } +.bi-universal-access::before { content: "\f826"; } +.bi-virus::before { content: "\f827"; } +.bi-virus2::before { content: "\f828"; } +.bi-wechat::before { content: "\f829"; } +.bi-yelp::before { content: "\f82a"; } +.bi-sign-stop-fill::before { content: "\f82b"; } +.bi-sign-stop-lights-fill::before { content: "\f82c"; } +.bi-sign-stop-lights::before { content: "\f82d"; } +.bi-sign-stop::before { content: "\f82e"; } +.bi-sign-turn-left-fill::before { content: "\f82f"; } +.bi-sign-turn-left::before { content: "\f830"; } +.bi-sign-turn-right-fill::before { content: "\f831"; } +.bi-sign-turn-right::before { content: "\f832"; } +.bi-sign-turn-slight-left-fill::before { content: "\f833"; } +.bi-sign-turn-slight-left::before { content: "\f834"; } +.bi-sign-turn-slight-right-fill::before { content: "\f835"; } +.bi-sign-turn-slight-right::before { content: "\f836"; } +.bi-sign-yield-fill::before { content: "\f837"; } +.bi-sign-yield::before { content: "\f838"; } +.bi-ev-station-fill::before { content: "\f839"; } +.bi-ev-station::before { content: "\f83a"; } +.bi-fuel-pump-diesel-fill::before { content: "\f83b"; } +.bi-fuel-pump-diesel::before { content: "\f83c"; } +.bi-fuel-pump-fill::before { content: "\f83d"; } +.bi-fuel-pump::before { content: "\f83e"; } +.bi-0-circle-fill::before { content: "\f83f"; } +.bi-0-circle::before { content: "\f840"; } +.bi-0-square-fill::before { content: "\f841"; } +.bi-0-square::before { content: "\f842"; } +.bi-rocket-fill::before { content: "\f843"; } +.bi-rocket-takeoff-fill::before { content: "\f844"; } +.bi-rocket-takeoff::before { content: "\f845"; } +.bi-rocket::before { content: "\f846"; } +.bi-stripe::before { content: "\f847"; } +.bi-subscript::before { content: "\f848"; } +.bi-superscript::before { content: "\f849"; } +.bi-trello::before { content: "\f84a"; } +.bi-envelope-at-fill::before { content: "\f84b"; } +.bi-envelope-at::before { content: "\f84c"; } +.bi-regex::before { content: "\f84d"; } +.bi-text-wrap::before { content: "\f84e"; } +.bi-sign-dead-end-fill::before { content: "\f84f"; } +.bi-sign-dead-end::before { content: "\f850"; } +.bi-sign-do-not-enter-fill::before { content: "\f851"; } +.bi-sign-do-not-enter::before { content: "\f852"; } +.bi-sign-intersection-fill::before { content: "\f853"; } +.bi-sign-intersection-side-fill::before { content: "\f854"; } +.bi-sign-intersection-side::before { content: "\f855"; } +.bi-sign-intersection-t-fill::before { content: "\f856"; } +.bi-sign-intersection-t::before { content: "\f857"; } +.bi-sign-intersection-y-fill::before { content: "\f858"; } +.bi-sign-intersection-y::before { content: "\f859"; } +.bi-sign-intersection::before { content: "\f85a"; } +.bi-sign-merge-left-fill::before { content: "\f85b"; } +.bi-sign-merge-left::before { content: "\f85c"; } +.bi-sign-merge-right-fill::before { content: "\f85d"; } +.bi-sign-merge-right::before { content: "\f85e"; } +.bi-sign-no-left-turn-fill::before { content: "\f85f"; } +.bi-sign-no-left-turn::before { content: "\f860"; } +.bi-sign-no-parking-fill::before { content: "\f861"; } +.bi-sign-no-parking::before { content: "\f862"; } +.bi-sign-no-right-turn-fill::before { content: "\f863"; } +.bi-sign-no-right-turn::before { content: "\f864"; } +.bi-sign-railroad-fill::before { content: "\f865"; } +.bi-sign-railroad::before { content: "\f866"; } +.bi-building-add::before { content: "\f867"; } +.bi-building-check::before { content: "\f868"; } +.bi-building-dash::before { content: "\f869"; } +.bi-building-down::before { content: "\f86a"; } +.bi-building-exclamation::before { content: "\f86b"; } +.bi-building-fill-add::before { content: "\f86c"; } +.bi-building-fill-check::before { content: "\f86d"; } +.bi-building-fill-dash::before { content: "\f86e"; } +.bi-building-fill-down::before { content: "\f86f"; } +.bi-building-fill-exclamation::before { content: "\f870"; } +.bi-building-fill-gear::before { content: "\f871"; } +.bi-building-fill-lock::before { content: "\f872"; } +.bi-building-fill-slash::before { content: "\f873"; } +.bi-building-fill-up::before { content: "\f874"; } +.bi-building-fill-x::before { content: "\f875"; } +.bi-building-fill::before { content: "\f876"; } +.bi-building-gear::before { content: "\f877"; } +.bi-building-lock::before { content: "\f878"; } +.bi-building-slash::before { content: "\f879"; } +.bi-building-up::before { content: "\f87a"; } +.bi-building-x::before { content: "\f87b"; } +.bi-buildings-fill::before { content: "\f87c"; } +.bi-buildings::before { content: "\f87d"; } +.bi-bus-front-fill::before { content: "\f87e"; } +.bi-bus-front::before { content: "\f87f"; } +.bi-ev-front-fill::before { content: "\f880"; } +.bi-ev-front::before { content: "\f881"; } +.bi-globe-americas::before { content: "\f882"; } +.bi-globe-asia-australia::before { content: "\f883"; } +.bi-globe-central-south-asia::before { content: "\f884"; } +.bi-globe-europe-africa::before { content: "\f885"; } +.bi-house-add-fill::before { content: "\f886"; } +.bi-house-add::before { content: "\f887"; } +.bi-house-check-fill::before { content: "\f888"; } +.bi-house-check::before { content: "\f889"; } +.bi-house-dash-fill::before { content: "\f88a"; } +.bi-house-dash::before { content: "\f88b"; } +.bi-house-down-fill::before { content: "\f88c"; } +.bi-house-down::before { content: "\f88d"; } +.bi-house-exclamation-fill::before { content: "\f88e"; } +.bi-house-exclamation::before { content: "\f88f"; } +.bi-house-gear-fill::before { content: "\f890"; } +.bi-house-gear::before { content: "\f891"; } +.bi-house-lock-fill::before { content: "\f892"; } +.bi-house-lock::before { content: "\f893"; } +.bi-house-slash-fill::before { content: "\f894"; } +.bi-house-slash::before { content: "\f895"; } +.bi-house-up-fill::before { content: "\f896"; } +.bi-house-up::before { content: "\f897"; } +.bi-house-x-fill::before { content: "\f898"; } +.bi-house-x::before { content: "\f899"; } +.bi-person-add::before { content: "\f89a"; } +.bi-person-down::before { content: "\f89b"; } +.bi-person-exclamation::before { content: "\f89c"; } +.bi-person-fill-add::before { content: "\f89d"; } +.bi-person-fill-check::before { content: "\f89e"; } +.bi-person-fill-dash::before { content: "\f89f"; } +.bi-person-fill-down::before { content: "\f8a0"; } +.bi-person-fill-exclamation::before { content: "\f8a1"; } +.bi-person-fill-gear::before { content: "\f8a2"; } +.bi-person-fill-lock::before { content: "\f8a3"; } +.bi-person-fill-slash::before { content: "\f8a4"; } +.bi-person-fill-up::before { content: "\f8a5"; } +.bi-person-fill-x::before { content: "\f8a6"; } +.bi-person-gear::before { content: "\f8a7"; } +.bi-person-lock::before { content: "\f8a8"; } +.bi-person-slash::before { content: "\f8a9"; } +.bi-person-up::before { content: "\f8aa"; } +.bi-scooter::before { content: "\f8ab"; } +.bi-taxi-front-fill::before { content: "\f8ac"; } +.bi-taxi-front::before { content: "\f8ad"; } +.bi-amd::before { content: "\f8ae"; } +.bi-database-add::before { content: "\f8af"; } +.bi-database-check::before { content: "\f8b0"; } +.bi-database-dash::before { content: "\f8b1"; } +.bi-database-down::before { content: "\f8b2"; } +.bi-database-exclamation::before { content: "\f8b3"; } +.bi-database-fill-add::before { content: "\f8b4"; } +.bi-database-fill-check::before { content: "\f8b5"; } +.bi-database-fill-dash::before { content: "\f8b6"; } +.bi-database-fill-down::before { content: "\f8b7"; } +.bi-database-fill-exclamation::before { content: "\f8b8"; } +.bi-database-fill-gear::before { content: "\f8b9"; } +.bi-database-fill-lock::before { content: "\f8ba"; } +.bi-database-fill-slash::before { content: "\f8bb"; } +.bi-database-fill-up::before { content: "\f8bc"; } +.bi-database-fill-x::before { content: "\f8bd"; } +.bi-database-fill::before { content: "\f8be"; } +.bi-database-gear::before { content: "\f8bf"; } +.bi-database-lock::before { content: "\f8c0"; } +.bi-database-slash::before { content: "\f8c1"; } +.bi-database-up::before { content: "\f8c2"; } +.bi-database-x::before { content: "\f8c3"; } +.bi-database::before { content: "\f8c4"; } +.bi-houses-fill::before { content: "\f8c5"; } +.bi-houses::before { content: "\f8c6"; } +.bi-nvidia::before { content: "\f8c7"; } +.bi-person-vcard-fill::before { content: "\f8c8"; } +.bi-person-vcard::before { content: "\f8c9"; } +.bi-sina-weibo::before { content: "\f8ca"; } +.bi-tencent-qq::before { content: "\f8cb"; } +.bi-wikipedia::before { content: "\f8cc"; } +.bi-alphabet-uppercase::before { content: "\f2a5"; } +.bi-alphabet::before { content: "\f68a"; } +.bi-amazon::before { content: "\f68d"; } +.bi-arrows-collapse-vertical::before { content: "\f690"; } +.bi-arrows-expand-vertical::before { content: "\f695"; } +.bi-arrows-vertical::before { content: "\f698"; } +.bi-arrows::before { content: "\f6a2"; } +.bi-ban-fill::before { content: "\f6a3"; } +.bi-ban::before { content: "\f6b6"; } +.bi-bing::before { content: "\f6c2"; } +.bi-cake::before { content: "\f6e0"; } +.bi-cake2::before { content: "\f6ed"; } +.bi-cookie::before { content: "\f6ee"; } +.bi-copy::before { content: "\f759"; } +.bi-crosshair::before { content: "\f769"; } +.bi-crosshair2::before { content: "\f794"; } +.bi-emoji-astonished-fill::before { content: "\f795"; } +.bi-emoji-astonished::before { content: "\f79a"; } +.bi-emoji-grimace-fill::before { content: "\f79b"; } +.bi-emoji-grimace::before { content: "\f7a0"; } +.bi-emoji-grin-fill::before { content: "\f7a1"; } +.bi-emoji-grin::before { content: "\f7a6"; } +.bi-emoji-surprise-fill::before { content: "\f7a7"; } +.bi-emoji-surprise::before { content: "\f7ac"; } +.bi-emoji-tear-fill::before { content: "\f7ad"; } +.bi-emoji-tear::before { content: "\f7b2"; } +.bi-envelope-arrow-down-fill::before { content: "\f7b3"; } +.bi-envelope-arrow-down::before { content: "\f7b8"; } +.bi-envelope-arrow-up-fill::before { content: "\f7b9"; } +.bi-envelope-arrow-up::before { content: "\f7be"; } +.bi-feather::before { content: "\f7bf"; } +.bi-feather2::before { content: "\f7c4"; } +.bi-floppy-fill::before { content: "\f7c5"; } +.bi-floppy::before { content: "\f7d8"; } +.bi-floppy2-fill::before { content: "\f7d9"; } +.bi-floppy2::before { content: "\f7e4"; } +.bi-gitlab::before { content: "\f7e5"; } +.bi-highlighter::before { content: "\f7f8"; } +.bi-marker-tip::before { content: "\f802"; } +.bi-nvme-fill::before { content: "\f803"; } +.bi-nvme::before { content: "\f80c"; } +.bi-opencollective::before { content: "\f80d"; } +.bi-pci-card-network::before { content: "\f8cd"; } +.bi-pci-card-sound::before { content: "\f8ce"; } +.bi-radar::before { content: "\f8cf"; } +.bi-send-arrow-down-fill::before { content: "\f8d0"; } +.bi-send-arrow-down::before { content: "\f8d1"; } +.bi-send-arrow-up-fill::before { content: "\f8d2"; } +.bi-send-arrow-up::before { content: "\f8d3"; } +.bi-sim-slash-fill::before { content: "\f8d4"; } +.bi-sim-slash::before { content: "\f8d5"; } +.bi-sourceforge::before { content: "\f8d6"; } +.bi-substack::before { content: "\f8d7"; } +.bi-threads-fill::before { content: "\f8d8"; } +.bi-threads::before { content: "\f8d9"; } +.bi-transparency::before { content: "\f8da"; } +.bi-twitter-x::before { content: "\f8db"; } +.bi-type-h4::before { content: "\f8dc"; } +.bi-type-h5::before { content: "\f8dd"; } +.bi-type-h6::before { content: "\f8de"; } +.bi-backpack-fill::before { content: "\f8df"; } +.bi-backpack::before { content: "\f8e0"; } +.bi-backpack2-fill::before { content: "\f8e1"; } +.bi-backpack2::before { content: "\f8e2"; } +.bi-backpack3-fill::before { content: "\f8e3"; } +.bi-backpack3::before { content: "\f8e4"; } +.bi-backpack4-fill::before { content: "\f8e5"; } +.bi-backpack4::before { content: "\f8e6"; } +.bi-brilliance::before { content: "\f8e7"; } +.bi-cake-fill::before { content: "\f8e8"; } +.bi-cake2-fill::before { content: "\f8e9"; } +.bi-duffle-fill::before { content: "\f8ea"; } +.bi-duffle::before { content: "\f8eb"; } +.bi-exposure::before { content: "\f8ec"; } +.bi-gender-neuter::before { content: "\f8ed"; } +.bi-highlights::before { content: "\f8ee"; } +.bi-luggage-fill::before { content: "\f8ef"; } +.bi-luggage::before { content: "\f8f0"; } +.bi-mailbox-flag::before { content: "\f8f1"; } +.bi-mailbox2-flag::before { content: "\f8f2"; } +.bi-noise-reduction::before { content: "\f8f3"; } +.bi-passport-fill::before { content: "\f8f4"; } +.bi-passport::before { content: "\f8f5"; } +.bi-person-arms-up::before { content: "\f8f6"; } +.bi-person-raised-hand::before { content: "\f8f7"; } +.bi-person-standing-dress::before { content: "\f8f8"; } +.bi-person-standing::before { content: "\f8f9"; } +.bi-person-walking::before { content: "\f8fa"; } +.bi-person-wheelchair::before { content: "\f8fb"; } +.bi-shadows::before { content: "\f8fc"; } +.bi-suitcase-fill::before { content: "\f8fd"; } +.bi-suitcase-lg-fill::before { content: "\f8fe"; } +.bi-suitcase-lg::before { content: "\f8ff"; } +.bi-suitcase::before { content: "\f900"; } +.bi-suitcase2-fill::before { content: "\f901"; } +.bi-suitcase2::before { content: "\f902"; } +.bi-vignette::before { content: "\f903"; } diff --git a/assets/static/bootstrap-icons/font/bootstrap-icons.json b/assets/static/bootstrap-icons/font/bootstrap-icons.json new file mode 100644 index 0000000..56247e5 --- /dev/null +++ b/assets/static/bootstrap-icons/font/bootstrap-icons.json @@ -0,0 +1,2052 @@ +{ + "123": 63103, + "alarm-fill": 61697, + "alarm": 61698, + "align-bottom": 61699, + "align-center": 61700, + "align-end": 61701, + "align-middle": 61702, + "align-start": 61703, + "align-top": 61704, + "alt": 61705, + "app-indicator": 61706, + "app": 61707, + "archive-fill": 61708, + "archive": 61709, + "arrow-90deg-down": 61710, + "arrow-90deg-left": 61711, + "arrow-90deg-right": 61712, + "arrow-90deg-up": 61713, + "arrow-bar-down": 61714, + "arrow-bar-left": 61715, + "arrow-bar-right": 61716, + "arrow-bar-up": 61717, + "arrow-clockwise": 61718, + "arrow-counterclockwise": 61719, + "arrow-down-circle-fill": 61720, + "arrow-down-circle": 61721, + "arrow-down-left-circle-fill": 61722, + "arrow-down-left-circle": 61723, + "arrow-down-left-square-fill": 61724, + "arrow-down-left-square": 61725, + "arrow-down-left": 61726, + "arrow-down-right-circle-fill": 61727, + "arrow-down-right-circle": 61728, + "arrow-down-right-square-fill": 61729, + "arrow-down-right-square": 61730, + "arrow-down-right": 61731, + "arrow-down-short": 61732, + "arrow-down-square-fill": 61733, + "arrow-down-square": 61734, + "arrow-down-up": 61735, + "arrow-down": 61736, + "arrow-left-circle-fill": 61737, + "arrow-left-circle": 61738, + "arrow-left-right": 61739, + "arrow-left-short": 61740, + "arrow-left-square-fill": 61741, + "arrow-left-square": 61742, + "arrow-left": 61743, + "arrow-repeat": 61744, + "arrow-return-left": 61745, + "arrow-return-right": 61746, + "arrow-right-circle-fill": 61747, + "arrow-right-circle": 61748, + "arrow-right-short": 61749, + "arrow-right-square-fill": 61750, + "arrow-right-square": 61751, + "arrow-right": 61752, + "arrow-up-circle-fill": 61753, + "arrow-up-circle": 61754, + "arrow-up-left-circle-fill": 61755, + "arrow-up-left-circle": 61756, + "arrow-up-left-square-fill": 61757, + "arrow-up-left-square": 61758, + "arrow-up-left": 61759, + "arrow-up-right-circle-fill": 61760, + "arrow-up-right-circle": 61761, + "arrow-up-right-square-fill": 61762, + "arrow-up-right-square": 61763, + "arrow-up-right": 61764, + "arrow-up-short": 61765, + "arrow-up-square-fill": 61766, + "arrow-up-square": 61767, + "arrow-up": 61768, + "arrows-angle-contract": 61769, + "arrows-angle-expand": 61770, + "arrows-collapse": 61771, + "arrows-expand": 61772, + "arrows-fullscreen": 61773, + "arrows-move": 61774, + "aspect-ratio-fill": 61775, + "aspect-ratio": 61776, + "asterisk": 61777, + "at": 61778, + "award-fill": 61779, + "award": 61780, + "back": 61781, + "backspace-fill": 61782, + "backspace-reverse-fill": 61783, + "backspace-reverse": 61784, + "backspace": 61785, + "badge-3d-fill": 61786, + "badge-3d": 61787, + "badge-4k-fill": 61788, + "badge-4k": 61789, + "badge-8k-fill": 61790, + "badge-8k": 61791, + "badge-ad-fill": 61792, + "badge-ad": 61793, + "badge-ar-fill": 61794, + "badge-ar": 61795, + "badge-cc-fill": 61796, + "badge-cc": 61797, + "badge-hd-fill": 61798, + "badge-hd": 61799, + "badge-tm-fill": 61800, + "badge-tm": 61801, + "badge-vo-fill": 61802, + "badge-vo": 61803, + "badge-vr-fill": 61804, + "badge-vr": 61805, + "badge-wc-fill": 61806, + "badge-wc": 61807, + "bag-check-fill": 61808, + "bag-check": 61809, + "bag-dash-fill": 61810, + "bag-dash": 61811, + "bag-fill": 61812, + "bag-plus-fill": 61813, + "bag-plus": 61814, + "bag-x-fill": 61815, + "bag-x": 61816, + "bag": 61817, + "bar-chart-fill": 61818, + "bar-chart-line-fill": 61819, + "bar-chart-line": 61820, + "bar-chart-steps": 61821, + "bar-chart": 61822, + "basket-fill": 61823, + "basket": 61824, + "basket2-fill": 61825, + "basket2": 61826, + "basket3-fill": 61827, + "basket3": 61828, + "battery-charging": 61829, + "battery-full": 61830, + "battery-half": 61831, + "battery": 61832, + "bell-fill": 61833, + "bell": 61834, + "bezier": 61835, + "bezier2": 61836, + "bicycle": 61837, + "binoculars-fill": 61838, + "binoculars": 61839, + "blockquote-left": 61840, + "blockquote-right": 61841, + "book-fill": 61842, + "book-half": 61843, + "book": 61844, + "bookmark-check-fill": 61845, + "bookmark-check": 61846, + "bookmark-dash-fill": 61847, + "bookmark-dash": 61848, + "bookmark-fill": 61849, + "bookmark-heart-fill": 61850, + "bookmark-heart": 61851, + "bookmark-plus-fill": 61852, + "bookmark-plus": 61853, + "bookmark-star-fill": 61854, + "bookmark-star": 61855, + "bookmark-x-fill": 61856, + "bookmark-x": 61857, + "bookmark": 61858, + "bookmarks-fill": 61859, + "bookmarks": 61860, + "bookshelf": 61861, + "bootstrap-fill": 61862, + "bootstrap-reboot": 61863, + "bootstrap": 61864, + "border-all": 61865, + "border-bottom": 61866, + "border-center": 61867, + "border-inner": 61868, + "border-left": 61869, + "border-middle": 61870, + "border-outer": 61871, + "border-right": 61872, + "border-style": 61873, + "border-top": 61874, + "border-width": 61875, + "border": 61876, + "bounding-box-circles": 61877, + "bounding-box": 61878, + "box-arrow-down-left": 61879, + "box-arrow-down-right": 61880, + "box-arrow-down": 61881, + "box-arrow-in-down-left": 61882, + "box-arrow-in-down-right": 61883, + "box-arrow-in-down": 61884, + "box-arrow-in-left": 61885, + "box-arrow-in-right": 61886, + "box-arrow-in-up-left": 61887, + "box-arrow-in-up-right": 61888, + "box-arrow-in-up": 61889, + "box-arrow-left": 61890, + "box-arrow-right": 61891, + "box-arrow-up-left": 61892, + "box-arrow-up-right": 61893, + "box-arrow-up": 61894, + "box-seam": 61895, + "box": 61896, + "braces": 61897, + "bricks": 61898, + "briefcase-fill": 61899, + "briefcase": 61900, + "brightness-alt-high-fill": 61901, + "brightness-alt-high": 61902, + "brightness-alt-low-fill": 61903, + "brightness-alt-low": 61904, + "brightness-high-fill": 61905, + "brightness-high": 61906, + "brightness-low-fill": 61907, + "brightness-low": 61908, + "broadcast-pin": 61909, + "broadcast": 61910, + "brush-fill": 61911, + "brush": 61912, + "bucket-fill": 61913, + "bucket": 61914, + "bug-fill": 61915, + "bug": 61916, + "building": 61917, + "bullseye": 61918, + "calculator-fill": 61919, + "calculator": 61920, + "calendar-check-fill": 61921, + "calendar-check": 61922, + "calendar-date-fill": 61923, + "calendar-date": 61924, + "calendar-day-fill": 61925, + "calendar-day": 61926, + "calendar-event-fill": 61927, + "calendar-event": 61928, + "calendar-fill": 61929, + "calendar-minus-fill": 61930, + "calendar-minus": 61931, + "calendar-month-fill": 61932, + "calendar-month": 61933, + "calendar-plus-fill": 61934, + "calendar-plus": 61935, + "calendar-range-fill": 61936, + "calendar-range": 61937, + "calendar-week-fill": 61938, + "calendar-week": 61939, + "calendar-x-fill": 61940, + "calendar-x": 61941, + "calendar": 61942, + "calendar2-check-fill": 61943, + "calendar2-check": 61944, + "calendar2-date-fill": 61945, + "calendar2-date": 61946, + "calendar2-day-fill": 61947, + "calendar2-day": 61948, + "calendar2-event-fill": 61949, + "calendar2-event": 61950, + "calendar2-fill": 61951, + "calendar2-minus-fill": 61952, + "calendar2-minus": 61953, + "calendar2-month-fill": 61954, + "calendar2-month": 61955, + "calendar2-plus-fill": 61956, + "calendar2-plus": 61957, + "calendar2-range-fill": 61958, + "calendar2-range": 61959, + "calendar2-week-fill": 61960, + "calendar2-week": 61961, + "calendar2-x-fill": 61962, + "calendar2-x": 61963, + "calendar2": 61964, + "calendar3-event-fill": 61965, + "calendar3-event": 61966, + "calendar3-fill": 61967, + "calendar3-range-fill": 61968, + "calendar3-range": 61969, + "calendar3-week-fill": 61970, + "calendar3-week": 61971, + "calendar3": 61972, + "calendar4-event": 61973, + "calendar4-range": 61974, + "calendar4-week": 61975, + "calendar4": 61976, + "camera-fill": 61977, + "camera-reels-fill": 61978, + "camera-reels": 61979, + "camera-video-fill": 61980, + "camera-video-off-fill": 61981, + "camera-video-off": 61982, + "camera-video": 61983, + "camera": 61984, + "camera2": 61985, + "capslock-fill": 61986, + "capslock": 61987, + "card-checklist": 61988, + "card-heading": 61989, + "card-image": 61990, + "card-list": 61991, + "card-text": 61992, + "caret-down-fill": 61993, + "caret-down-square-fill": 61994, + "caret-down-square": 61995, + "caret-down": 61996, + "caret-left-fill": 61997, + "caret-left-square-fill": 61998, + "caret-left-square": 61999, + "caret-left": 62000, + "caret-right-fill": 62001, + "caret-right-square-fill": 62002, + "caret-right-square": 62003, + "caret-right": 62004, + "caret-up-fill": 62005, + "caret-up-square-fill": 62006, + "caret-up-square": 62007, + "caret-up": 62008, + "cart-check-fill": 62009, + "cart-check": 62010, + "cart-dash-fill": 62011, + "cart-dash": 62012, + "cart-fill": 62013, + "cart-plus-fill": 62014, + "cart-plus": 62015, + "cart-x-fill": 62016, + "cart-x": 62017, + "cart": 62018, + "cart2": 62019, + "cart3": 62020, + "cart4": 62021, + "cash-stack": 62022, + "cash": 62023, + "cast": 62024, + "chat-dots-fill": 62025, + "chat-dots": 62026, + "chat-fill": 62027, + "chat-left-dots-fill": 62028, + "chat-left-dots": 62029, + "chat-left-fill": 62030, + "chat-left-quote-fill": 62031, + "chat-left-quote": 62032, + "chat-left-text-fill": 62033, + "chat-left-text": 62034, + "chat-left": 62035, + "chat-quote-fill": 62036, + "chat-quote": 62037, + "chat-right-dots-fill": 62038, + "chat-right-dots": 62039, + "chat-right-fill": 62040, + "chat-right-quote-fill": 62041, + "chat-right-quote": 62042, + "chat-right-text-fill": 62043, + "chat-right-text": 62044, + "chat-right": 62045, + "chat-square-dots-fill": 62046, + "chat-square-dots": 62047, + "chat-square-fill": 62048, + "chat-square-quote-fill": 62049, + "chat-square-quote": 62050, + "chat-square-text-fill": 62051, + "chat-square-text": 62052, + "chat-square": 62053, + "chat-text-fill": 62054, + "chat-text": 62055, + "chat": 62056, + "check-all": 62057, + "check-circle-fill": 62058, + "check-circle": 62059, + "check-square-fill": 62060, + "check-square": 62061, + "check": 62062, + "check2-all": 62063, + "check2-circle": 62064, + "check2-square": 62065, + "check2": 62066, + "chevron-bar-contract": 62067, + "chevron-bar-down": 62068, + "chevron-bar-expand": 62069, + "chevron-bar-left": 62070, + "chevron-bar-right": 62071, + "chevron-bar-up": 62072, + "chevron-compact-down": 62073, + "chevron-compact-left": 62074, + "chevron-compact-right": 62075, + "chevron-compact-up": 62076, + "chevron-contract": 62077, + "chevron-double-down": 62078, + "chevron-double-left": 62079, + "chevron-double-right": 62080, + "chevron-double-up": 62081, + "chevron-down": 62082, + "chevron-expand": 62083, + "chevron-left": 62084, + "chevron-right": 62085, + "chevron-up": 62086, + "circle-fill": 62087, + "circle-half": 62088, + "circle-square": 62089, + "circle": 62090, + "clipboard-check": 62091, + "clipboard-data": 62092, + "clipboard-minus": 62093, + "clipboard-plus": 62094, + "clipboard-x": 62095, + "clipboard": 62096, + "clock-fill": 62097, + "clock-history": 62098, + "clock": 62099, + "cloud-arrow-down-fill": 62100, + "cloud-arrow-down": 62101, + "cloud-arrow-up-fill": 62102, + "cloud-arrow-up": 62103, + "cloud-check-fill": 62104, + "cloud-check": 62105, + "cloud-download-fill": 62106, + "cloud-download": 62107, + "cloud-drizzle-fill": 62108, + "cloud-drizzle": 62109, + "cloud-fill": 62110, + "cloud-fog-fill": 62111, + "cloud-fog": 62112, + "cloud-fog2-fill": 62113, + "cloud-fog2": 62114, + "cloud-hail-fill": 62115, + "cloud-hail": 62116, + "cloud-haze-fill": 62118, + "cloud-haze": 62119, + "cloud-haze2-fill": 62120, + "cloud-lightning-fill": 62121, + "cloud-lightning-rain-fill": 62122, + "cloud-lightning-rain": 62123, + "cloud-lightning": 62124, + "cloud-minus-fill": 62125, + "cloud-minus": 62126, + "cloud-moon-fill": 62127, + "cloud-moon": 62128, + "cloud-plus-fill": 62129, + "cloud-plus": 62130, + "cloud-rain-fill": 62131, + "cloud-rain-heavy-fill": 62132, + "cloud-rain-heavy": 62133, + "cloud-rain": 62134, + "cloud-slash-fill": 62135, + "cloud-slash": 62136, + "cloud-sleet-fill": 62137, + "cloud-sleet": 62138, + "cloud-snow-fill": 62139, + "cloud-snow": 62140, + "cloud-sun-fill": 62141, + "cloud-sun": 62142, + "cloud-upload-fill": 62143, + "cloud-upload": 62144, + "cloud": 62145, + "clouds-fill": 62146, + "clouds": 62147, + "cloudy-fill": 62148, + "cloudy": 62149, + "code-slash": 62150, + "code-square": 62151, + "code": 62152, + "collection-fill": 62153, + "collection-play-fill": 62154, + "collection-play": 62155, + "collection": 62156, + "columns-gap": 62157, + "columns": 62158, + "command": 62159, + "compass-fill": 62160, + "compass": 62161, + "cone-striped": 62162, + "cone": 62163, + "controller": 62164, + "cpu-fill": 62165, + "cpu": 62166, + "credit-card-2-back-fill": 62167, + "credit-card-2-back": 62168, + "credit-card-2-front-fill": 62169, + "credit-card-2-front": 62170, + "credit-card-fill": 62171, + "credit-card": 62172, + "crop": 62173, + "cup-fill": 62174, + "cup-straw": 62175, + "cup": 62176, + "cursor-fill": 62177, + "cursor-text": 62178, + "cursor": 62179, + "dash-circle-dotted": 62180, + "dash-circle-fill": 62181, + "dash-circle": 62182, + "dash-square-dotted": 62183, + "dash-square-fill": 62184, + "dash-square": 62185, + "dash": 62186, + "diagram-2-fill": 62187, + "diagram-2": 62188, + "diagram-3-fill": 62189, + "diagram-3": 62190, + "diamond-fill": 62191, + "diamond-half": 62192, + "diamond": 62193, + "dice-1-fill": 62194, + "dice-1": 62195, + "dice-2-fill": 62196, + "dice-2": 62197, + "dice-3-fill": 62198, + "dice-3": 62199, + "dice-4-fill": 62200, + "dice-4": 62201, + "dice-5-fill": 62202, + "dice-5": 62203, + "dice-6-fill": 62204, + "dice-6": 62205, + "disc-fill": 62206, + "disc": 62207, + "discord": 62208, + "display-fill": 62209, + "display": 62210, + "distribute-horizontal": 62211, + "distribute-vertical": 62212, + "door-closed-fill": 62213, + "door-closed": 62214, + "door-open-fill": 62215, + "door-open": 62216, + "dot": 62217, + "download": 62218, + "droplet-fill": 62219, + "droplet-half": 62220, + "droplet": 62221, + "earbuds": 62222, + "easel-fill": 62223, + "easel": 62224, + "egg-fill": 62225, + "egg-fried": 62226, + "egg": 62227, + "eject-fill": 62228, + "eject": 62229, + "emoji-angry-fill": 62230, + "emoji-angry": 62231, + "emoji-dizzy-fill": 62232, + "emoji-dizzy": 62233, + "emoji-expressionless-fill": 62234, + "emoji-expressionless": 62235, + "emoji-frown-fill": 62236, + "emoji-frown": 62237, + "emoji-heart-eyes-fill": 62238, + "emoji-heart-eyes": 62239, + "emoji-laughing-fill": 62240, + "emoji-laughing": 62241, + "emoji-neutral-fill": 62242, + "emoji-neutral": 62243, + "emoji-smile-fill": 62244, + "emoji-smile-upside-down-fill": 62245, + "emoji-smile-upside-down": 62246, + "emoji-smile": 62247, + "emoji-sunglasses-fill": 62248, + "emoji-sunglasses": 62249, + "emoji-wink-fill": 62250, + "emoji-wink": 62251, + "envelope-fill": 62252, + "envelope-open-fill": 62253, + "envelope-open": 62254, + "envelope": 62255, + "eraser-fill": 62256, + "eraser": 62257, + "exclamation-circle-fill": 62258, + "exclamation-circle": 62259, + "exclamation-diamond-fill": 62260, + "exclamation-diamond": 62261, + "exclamation-octagon-fill": 62262, + "exclamation-octagon": 62263, + "exclamation-square-fill": 62264, + "exclamation-square": 62265, + "exclamation-triangle-fill": 62266, + "exclamation-triangle": 62267, + "exclamation": 62268, + "exclude": 62269, + "eye-fill": 62270, + "eye-slash-fill": 62271, + "eye-slash": 62272, + "eye": 62273, + "eyedropper": 62274, + "eyeglasses": 62275, + "facebook": 62276, + "file-arrow-down-fill": 62277, + "file-arrow-down": 62278, + "file-arrow-up-fill": 62279, + "file-arrow-up": 62280, + "file-bar-graph-fill": 62281, + "file-bar-graph": 62282, + "file-binary-fill": 62283, + "file-binary": 62284, + "file-break-fill": 62285, + "file-break": 62286, + "file-check-fill": 62287, + "file-check": 62288, + "file-code-fill": 62289, + "file-code": 62290, + "file-diff-fill": 62291, + "file-diff": 62292, + "file-earmark-arrow-down-fill": 62293, + "file-earmark-arrow-down": 62294, + "file-earmark-arrow-up-fill": 62295, + "file-earmark-arrow-up": 62296, + "file-earmark-bar-graph-fill": 62297, + "file-earmark-bar-graph": 62298, + "file-earmark-binary-fill": 62299, + "file-earmark-binary": 62300, + "file-earmark-break-fill": 62301, + "file-earmark-break": 62302, + "file-earmark-check-fill": 62303, + "file-earmark-check": 62304, + "file-earmark-code-fill": 62305, + "file-earmark-code": 62306, + "file-earmark-diff-fill": 62307, + "file-earmark-diff": 62308, + "file-earmark-easel-fill": 62309, + "file-earmark-easel": 62310, + "file-earmark-excel-fill": 62311, + "file-earmark-excel": 62312, + "file-earmark-fill": 62313, + "file-earmark-font-fill": 62314, + "file-earmark-font": 62315, + "file-earmark-image-fill": 62316, + "file-earmark-image": 62317, + "file-earmark-lock-fill": 62318, + "file-earmark-lock": 62319, + "file-earmark-lock2-fill": 62320, + "file-earmark-lock2": 62321, + "file-earmark-medical-fill": 62322, + "file-earmark-medical": 62323, + "file-earmark-minus-fill": 62324, + "file-earmark-minus": 62325, + "file-earmark-music-fill": 62326, + "file-earmark-music": 62327, + "file-earmark-person-fill": 62328, + "file-earmark-person": 62329, + "file-earmark-play-fill": 62330, + "file-earmark-play": 62331, + "file-earmark-plus-fill": 62332, + "file-earmark-plus": 62333, + "file-earmark-post-fill": 62334, + "file-earmark-post": 62335, + "file-earmark-ppt-fill": 62336, + "file-earmark-ppt": 62337, + "file-earmark-richtext-fill": 62338, + "file-earmark-richtext": 62339, + "file-earmark-ruled-fill": 62340, + "file-earmark-ruled": 62341, + "file-earmark-slides-fill": 62342, + "file-earmark-slides": 62343, + "file-earmark-spreadsheet-fill": 62344, + "file-earmark-spreadsheet": 62345, + "file-earmark-text-fill": 62346, + "file-earmark-text": 62347, + "file-earmark-word-fill": 62348, + "file-earmark-word": 62349, + "file-earmark-x-fill": 62350, + "file-earmark-x": 62351, + "file-earmark-zip-fill": 62352, + "file-earmark-zip": 62353, + "file-earmark": 62354, + "file-easel-fill": 62355, + "file-easel": 62356, + "file-excel-fill": 62357, + "file-excel": 62358, + "file-fill": 62359, + "file-font-fill": 62360, + "file-font": 62361, + "file-image-fill": 62362, + "file-image": 62363, + "file-lock-fill": 62364, + "file-lock": 62365, + "file-lock2-fill": 62366, + "file-lock2": 62367, + "file-medical-fill": 62368, + "file-medical": 62369, + "file-minus-fill": 62370, + "file-minus": 62371, + "file-music-fill": 62372, + "file-music": 62373, + "file-person-fill": 62374, + "file-person": 62375, + "file-play-fill": 62376, + "file-play": 62377, + "file-plus-fill": 62378, + "file-plus": 62379, + "file-post-fill": 62380, + "file-post": 62381, + "file-ppt-fill": 62382, + "file-ppt": 62383, + "file-richtext-fill": 62384, + "file-richtext": 62385, + "file-ruled-fill": 62386, + "file-ruled": 62387, + "file-slides-fill": 62388, + "file-slides": 62389, + "file-spreadsheet-fill": 62390, + "file-spreadsheet": 62391, + "file-text-fill": 62392, + "file-text": 62393, + "file-word-fill": 62394, + "file-word": 62395, + "file-x-fill": 62396, + "file-x": 62397, + "file-zip-fill": 62398, + "file-zip": 62399, + "file": 62400, + "files-alt": 62401, + "files": 62402, + "film": 62403, + "filter-circle-fill": 62404, + "filter-circle": 62405, + "filter-left": 62406, + "filter-right": 62407, + "filter-square-fill": 62408, + "filter-square": 62409, + "filter": 62410, + "flag-fill": 62411, + "flag": 62412, + "flower1": 62413, + "flower2": 62414, + "flower3": 62415, + "folder-check": 62416, + "folder-fill": 62417, + "folder-minus": 62418, + "folder-plus": 62419, + "folder-symlink-fill": 62420, + "folder-symlink": 62421, + "folder-x": 62422, + "folder": 62423, + "folder2-open": 62424, + "folder2": 62425, + "fonts": 62426, + "forward-fill": 62427, + "forward": 62428, + "front": 62429, + "fullscreen-exit": 62430, + "fullscreen": 62431, + "funnel-fill": 62432, + "funnel": 62433, + "gear-fill": 62434, + "gear-wide-connected": 62435, + "gear-wide": 62436, + "gear": 62437, + "gem": 62438, + "geo-alt-fill": 62439, + "geo-alt": 62440, + "geo-fill": 62441, + "geo": 62442, + "gift-fill": 62443, + "gift": 62444, + "github": 62445, + "globe": 62446, + "globe2": 62447, + "google": 62448, + "graph-down": 62449, + "graph-up": 62450, + "grid-1x2-fill": 62451, + "grid-1x2": 62452, + "grid-3x2-gap-fill": 62453, + "grid-3x2-gap": 62454, + "grid-3x2": 62455, + "grid-3x3-gap-fill": 62456, + "grid-3x3-gap": 62457, + "grid-3x3": 62458, + "grid-fill": 62459, + "grid": 62460, + "grip-horizontal": 62461, + "grip-vertical": 62462, + "hammer": 62463, + "hand-index-fill": 62464, + "hand-index-thumb-fill": 62465, + "hand-index-thumb": 62466, + "hand-index": 62467, + "hand-thumbs-down-fill": 62468, + "hand-thumbs-down": 62469, + "hand-thumbs-up-fill": 62470, + "hand-thumbs-up": 62471, + "handbag-fill": 62472, + "handbag": 62473, + "hash": 62474, + "hdd-fill": 62475, + "hdd-network-fill": 62476, + "hdd-network": 62477, + "hdd-rack-fill": 62478, + "hdd-rack": 62479, + "hdd-stack-fill": 62480, + "hdd-stack": 62481, + "hdd": 62482, + "headphones": 62483, + "headset": 62484, + "heart-fill": 62485, + "heart-half": 62486, + "heart": 62487, + "heptagon-fill": 62488, + "heptagon-half": 62489, + "heptagon": 62490, + "hexagon-fill": 62491, + "hexagon-half": 62492, + "hexagon": 62493, + "hourglass-bottom": 62494, + "hourglass-split": 62495, + "hourglass-top": 62496, + "hourglass": 62497, + "house-door-fill": 62498, + "house-door": 62499, + "house-fill": 62500, + "house": 62501, + "hr": 62502, + "hurricane": 62503, + "image-alt": 62504, + "image-fill": 62505, + "image": 62506, + "images": 62507, + "inbox-fill": 62508, + "inbox": 62509, + "inboxes-fill": 62510, + "inboxes": 62511, + "info-circle-fill": 62512, + "info-circle": 62513, + "info-square-fill": 62514, + "info-square": 62515, + "info": 62516, + "input-cursor-text": 62517, + "input-cursor": 62518, + "instagram": 62519, + "intersect": 62520, + "journal-album": 62521, + "journal-arrow-down": 62522, + "journal-arrow-up": 62523, + "journal-bookmark-fill": 62524, + "journal-bookmark": 62525, + "journal-check": 62526, + "journal-code": 62527, + "journal-medical": 62528, + "journal-minus": 62529, + "journal-plus": 62530, + "journal-richtext": 62531, + "journal-text": 62532, + "journal-x": 62533, + "journal": 62534, + "journals": 62535, + "joystick": 62536, + "justify-left": 62537, + "justify-right": 62538, + "justify": 62539, + "kanban-fill": 62540, + "kanban": 62541, + "key-fill": 62542, + "key": 62543, + "keyboard-fill": 62544, + "keyboard": 62545, + "ladder": 62546, + "lamp-fill": 62547, + "lamp": 62548, + "laptop-fill": 62549, + "laptop": 62550, + "layer-backward": 62551, + "layer-forward": 62552, + "layers-fill": 62553, + "layers-half": 62554, + "layers": 62555, + "layout-sidebar-inset-reverse": 62556, + "layout-sidebar-inset": 62557, + "layout-sidebar-reverse": 62558, + "layout-sidebar": 62559, + "layout-split": 62560, + "layout-text-sidebar-reverse": 62561, + "layout-text-sidebar": 62562, + "layout-text-window-reverse": 62563, + "layout-text-window": 62564, + "layout-three-columns": 62565, + "layout-wtf": 62566, + "life-preserver": 62567, + "lightbulb-fill": 62568, + "lightbulb-off-fill": 62569, + "lightbulb-off": 62570, + "lightbulb": 62571, + "lightning-charge-fill": 62572, + "lightning-charge": 62573, + "lightning-fill": 62574, + "lightning": 62575, + "link-45deg": 62576, + "link": 62577, + "linkedin": 62578, + "list-check": 62579, + "list-nested": 62580, + "list-ol": 62581, + "list-stars": 62582, + "list-task": 62583, + "list-ul": 62584, + "list": 62585, + "lock-fill": 62586, + "lock": 62587, + "mailbox": 62588, + "mailbox2": 62589, + "map-fill": 62590, + "map": 62591, + "markdown-fill": 62592, + "markdown": 62593, + "mask": 62594, + "megaphone-fill": 62595, + "megaphone": 62596, + "menu-app-fill": 62597, + "menu-app": 62598, + "menu-button-fill": 62599, + "menu-button-wide-fill": 62600, + "menu-button-wide": 62601, + "menu-button": 62602, + "menu-down": 62603, + "menu-up": 62604, + "mic-fill": 62605, + "mic-mute-fill": 62606, + "mic-mute": 62607, + "mic": 62608, + "minecart-loaded": 62609, + "minecart": 62610, + "moisture": 62611, + "moon-fill": 62612, + "moon-stars-fill": 62613, + "moon-stars": 62614, + "moon": 62615, + "mouse-fill": 62616, + "mouse": 62617, + "mouse2-fill": 62618, + "mouse2": 62619, + "mouse3-fill": 62620, + "mouse3": 62621, + "music-note-beamed": 62622, + "music-note-list": 62623, + "music-note": 62624, + "music-player-fill": 62625, + "music-player": 62626, + "newspaper": 62627, + "node-minus-fill": 62628, + "node-minus": 62629, + "node-plus-fill": 62630, + "node-plus": 62631, + "nut-fill": 62632, + "nut": 62633, + "octagon-fill": 62634, + "octagon-half": 62635, + "octagon": 62636, + "option": 62637, + "outlet": 62638, + "paint-bucket": 62639, + "palette-fill": 62640, + "palette": 62641, + "palette2": 62642, + "paperclip": 62643, + "paragraph": 62644, + "patch-check-fill": 62645, + "patch-check": 62646, + "patch-exclamation-fill": 62647, + "patch-exclamation": 62648, + "patch-minus-fill": 62649, + "patch-minus": 62650, + "patch-plus-fill": 62651, + "patch-plus": 62652, + "patch-question-fill": 62653, + "patch-question": 62654, + "pause-btn-fill": 62655, + "pause-btn": 62656, + "pause-circle-fill": 62657, + "pause-circle": 62658, + "pause-fill": 62659, + "pause": 62660, + "peace-fill": 62661, + "peace": 62662, + "pen-fill": 62663, + "pen": 62664, + "pencil-fill": 62665, + "pencil-square": 62666, + "pencil": 62667, + "pentagon-fill": 62668, + "pentagon-half": 62669, + "pentagon": 62670, + "people-fill": 62671, + "people": 62672, + "percent": 62673, + "person-badge-fill": 62674, + "person-badge": 62675, + "person-bounding-box": 62676, + "person-check-fill": 62677, + "person-check": 62678, + "person-circle": 62679, + "person-dash-fill": 62680, + "person-dash": 62681, + "person-fill": 62682, + "person-lines-fill": 62683, + "person-plus-fill": 62684, + "person-plus": 62685, + "person-square": 62686, + "person-x-fill": 62687, + "person-x": 62688, + "person": 62689, + "phone-fill": 62690, + "phone-landscape-fill": 62691, + "phone-landscape": 62692, + "phone-vibrate-fill": 62693, + "phone-vibrate": 62694, + "phone": 62695, + "pie-chart-fill": 62696, + "pie-chart": 62697, + "pin-angle-fill": 62698, + "pin-angle": 62699, + "pin-fill": 62700, + "pin": 62701, + "pip-fill": 62702, + "pip": 62703, + "play-btn-fill": 62704, + "play-btn": 62705, + "play-circle-fill": 62706, + "play-circle": 62707, + "play-fill": 62708, + "play": 62709, + "plug-fill": 62710, + "plug": 62711, + "plus-circle-dotted": 62712, + "plus-circle-fill": 62713, + "plus-circle": 62714, + "plus-square-dotted": 62715, + "plus-square-fill": 62716, + "plus-square": 62717, + "plus": 62718, + "power": 62719, + "printer-fill": 62720, + "printer": 62721, + "puzzle-fill": 62722, + "puzzle": 62723, + "question-circle-fill": 62724, + "question-circle": 62725, + "question-diamond-fill": 62726, + "question-diamond": 62727, + "question-octagon-fill": 62728, + "question-octagon": 62729, + "question-square-fill": 62730, + "question-square": 62731, + "question": 62732, + "rainbow": 62733, + "receipt-cutoff": 62734, + "receipt": 62735, + "reception-0": 62736, + "reception-1": 62737, + "reception-2": 62738, + "reception-3": 62739, + "reception-4": 62740, + "record-btn-fill": 62741, + "record-btn": 62742, + "record-circle-fill": 62743, + "record-circle": 62744, + "record-fill": 62745, + "record": 62746, + "record2-fill": 62747, + "record2": 62748, + "reply-all-fill": 62749, + "reply-all": 62750, + "reply-fill": 62751, + "reply": 62752, + "rss-fill": 62753, + "rss": 62754, + "rulers": 62755, + "save-fill": 62756, + "save": 62757, + "save2-fill": 62758, + "save2": 62759, + "scissors": 62760, + "screwdriver": 62761, + "search": 62762, + "segmented-nav": 62763, + "server": 62764, + "share-fill": 62765, + "share": 62766, + "shield-check": 62767, + "shield-exclamation": 62768, + "shield-fill-check": 62769, + "shield-fill-exclamation": 62770, + "shield-fill-minus": 62771, + "shield-fill-plus": 62772, + "shield-fill-x": 62773, + "shield-fill": 62774, + "shield-lock-fill": 62775, + "shield-lock": 62776, + "shield-minus": 62777, + "shield-plus": 62778, + "shield-shaded": 62779, + "shield-slash-fill": 62780, + "shield-slash": 62781, + "shield-x": 62782, + "shield": 62783, + "shift-fill": 62784, + "shift": 62785, + "shop-window": 62786, + "shop": 62787, + "shuffle": 62788, + "signpost-2-fill": 62789, + "signpost-2": 62790, + "signpost-fill": 62791, + "signpost-split-fill": 62792, + "signpost-split": 62793, + "signpost": 62794, + "sim-fill": 62795, + "sim": 62796, + "skip-backward-btn-fill": 62797, + "skip-backward-btn": 62798, + "skip-backward-circle-fill": 62799, + "skip-backward-circle": 62800, + "skip-backward-fill": 62801, + "skip-backward": 62802, + "skip-end-btn-fill": 62803, + "skip-end-btn": 62804, + "skip-end-circle-fill": 62805, + "skip-end-circle": 62806, + "skip-end-fill": 62807, + "skip-end": 62808, + "skip-forward-btn-fill": 62809, + "skip-forward-btn": 62810, + "skip-forward-circle-fill": 62811, + "skip-forward-circle": 62812, + "skip-forward-fill": 62813, + "skip-forward": 62814, + "skip-start-btn-fill": 62815, + "skip-start-btn": 62816, + "skip-start-circle-fill": 62817, + "skip-start-circle": 62818, + "skip-start-fill": 62819, + "skip-start": 62820, + "slack": 62821, + "slash-circle-fill": 62822, + "slash-circle": 62823, + "slash-square-fill": 62824, + "slash-square": 62825, + "slash": 62826, + "sliders": 62827, + "smartwatch": 62828, + "snow": 62829, + "snow2": 62830, + "snow3": 62831, + "sort-alpha-down-alt": 62832, + "sort-alpha-down": 62833, + "sort-alpha-up-alt": 62834, + "sort-alpha-up": 62835, + "sort-down-alt": 62836, + "sort-down": 62837, + "sort-numeric-down-alt": 62838, + "sort-numeric-down": 62839, + "sort-numeric-up-alt": 62840, + "sort-numeric-up": 62841, + "sort-up-alt": 62842, + "sort-up": 62843, + "soundwave": 62844, + "speaker-fill": 62845, + "speaker": 62846, + "speedometer": 62847, + "speedometer2": 62848, + "spellcheck": 62849, + "square-fill": 62850, + "square-half": 62851, + "square": 62852, + "stack": 62853, + "star-fill": 62854, + "star-half": 62855, + "star": 62856, + "stars": 62857, + "stickies-fill": 62858, + "stickies": 62859, + "sticky-fill": 62860, + "sticky": 62861, + "stop-btn-fill": 62862, + "stop-btn": 62863, + "stop-circle-fill": 62864, + "stop-circle": 62865, + "stop-fill": 62866, + "stop": 62867, + "stoplights-fill": 62868, + "stoplights": 62869, + "stopwatch-fill": 62870, + "stopwatch": 62871, + "subtract": 62872, + "suit-club-fill": 62873, + "suit-club": 62874, + "suit-diamond-fill": 62875, + "suit-diamond": 62876, + "suit-heart-fill": 62877, + "suit-heart": 62878, + "suit-spade-fill": 62879, + "suit-spade": 62880, + "sun-fill": 62881, + "sun": 62882, + "sunglasses": 62883, + "sunrise-fill": 62884, + "sunrise": 62885, + "sunset-fill": 62886, + "sunset": 62887, + "symmetry-horizontal": 62888, + "symmetry-vertical": 62889, + "table": 62890, + "tablet-fill": 62891, + "tablet-landscape-fill": 62892, + "tablet-landscape": 62893, + "tablet": 62894, + "tag-fill": 62895, + "tag": 62896, + "tags-fill": 62897, + "tags": 62898, + "telegram": 62899, + "telephone-fill": 62900, + "telephone-forward-fill": 62901, + "telephone-forward": 62902, + "telephone-inbound-fill": 62903, + "telephone-inbound": 62904, + "telephone-minus-fill": 62905, + "telephone-minus": 62906, + "telephone-outbound-fill": 62907, + "telephone-outbound": 62908, + "telephone-plus-fill": 62909, + "telephone-plus": 62910, + "telephone-x-fill": 62911, + "telephone-x": 62912, + "telephone": 62913, + "terminal-fill": 62914, + "terminal": 62915, + "text-center": 62916, + "text-indent-left": 62917, + "text-indent-right": 62918, + "text-left": 62919, + "text-paragraph": 62920, + "text-right": 62921, + "textarea-resize": 62922, + "textarea-t": 62923, + "textarea": 62924, + "thermometer-half": 62925, + "thermometer-high": 62926, + "thermometer-low": 62927, + "thermometer-snow": 62928, + "thermometer-sun": 62929, + "thermometer": 62930, + "three-dots-vertical": 62931, + "three-dots": 62932, + "toggle-off": 62933, + "toggle-on": 62934, + "toggle2-off": 62935, + "toggle2-on": 62936, + "toggles": 62937, + "toggles2": 62938, + "tools": 62939, + "tornado": 62940, + "trash-fill": 62941, + "trash": 62942, + "trash2-fill": 62943, + "trash2": 62944, + "tree-fill": 62945, + "tree": 62946, + "triangle-fill": 62947, + "triangle-half": 62948, + "triangle": 62949, + "trophy-fill": 62950, + "trophy": 62951, + "tropical-storm": 62952, + "truck-flatbed": 62953, + "truck": 62954, + "tsunami": 62955, + "tv-fill": 62956, + "tv": 62957, + "twitch": 62958, + "twitter": 62959, + "type-bold": 62960, + "type-h1": 62961, + "type-h2": 62962, + "type-h3": 62963, + "type-italic": 62964, + "type-strikethrough": 62965, + "type-underline": 62966, + "type": 62967, + "ui-checks-grid": 62968, + "ui-checks": 62969, + "ui-radios-grid": 62970, + "ui-radios": 62971, + "umbrella-fill": 62972, + "umbrella": 62973, + "union": 62974, + "unlock-fill": 62975, + "unlock": 62976, + "upc-scan": 62977, + "upc": 62978, + "upload": 62979, + "vector-pen": 62980, + "view-list": 62981, + "view-stacked": 62982, + "vinyl-fill": 62983, + "vinyl": 62984, + "voicemail": 62985, + "volume-down-fill": 62986, + "volume-down": 62987, + "volume-mute-fill": 62988, + "volume-mute": 62989, + "volume-off-fill": 62990, + "volume-off": 62991, + "volume-up-fill": 62992, + "volume-up": 62993, + "vr": 62994, + "wallet-fill": 62995, + "wallet": 62996, + "wallet2": 62997, + "watch": 62998, + "water": 62999, + "whatsapp": 63000, + "wifi-1": 63001, + "wifi-2": 63002, + "wifi-off": 63003, + "wifi": 63004, + "wind": 63005, + "window-dock": 63006, + "window-sidebar": 63007, + "window": 63008, + "wrench": 63009, + "x-circle-fill": 63010, + "x-circle": 63011, + "x-diamond-fill": 63012, + "x-diamond": 63013, + "x-octagon-fill": 63014, + "x-octagon": 63015, + "x-square-fill": 63016, + "x-square": 63017, + "x": 63018, + "youtube": 63019, + "zoom-in": 63020, + "zoom-out": 63021, + "bank": 63022, + "bank2": 63023, + "bell-slash-fill": 63024, + "bell-slash": 63025, + "cash-coin": 63026, + "check-lg": 63027, + "coin": 63028, + "currency-bitcoin": 63029, + "currency-dollar": 63030, + "currency-euro": 63031, + "currency-exchange": 63032, + "currency-pound": 63033, + "currency-yen": 63034, + "dash-lg": 63035, + "exclamation-lg": 63036, + "file-earmark-pdf-fill": 63037, + "file-earmark-pdf": 63038, + "file-pdf-fill": 63039, + "file-pdf": 63040, + "gender-ambiguous": 63041, + "gender-female": 63042, + "gender-male": 63043, + "gender-trans": 63044, + "headset-vr": 63045, + "info-lg": 63046, + "mastodon": 63047, + "messenger": 63048, + "piggy-bank-fill": 63049, + "piggy-bank": 63050, + "pin-map-fill": 63051, + "pin-map": 63052, + "plus-lg": 63053, + "question-lg": 63054, + "recycle": 63055, + "reddit": 63056, + "safe-fill": 63057, + "safe2-fill": 63058, + "safe2": 63059, + "sd-card-fill": 63060, + "sd-card": 63061, + "skype": 63062, + "slash-lg": 63063, + "translate": 63064, + "x-lg": 63065, + "safe": 63066, + "apple": 63067, + "microsoft": 63069, + "windows": 63070, + "behance": 63068, + "dribbble": 63071, + "line": 63072, + "medium": 63073, + "paypal": 63074, + "pinterest": 63075, + "signal": 63076, + "snapchat": 63077, + "spotify": 63078, + "stack-overflow": 63079, + "strava": 63080, + "wordpress": 63081, + "vimeo": 63082, + "activity": 63083, + "easel2-fill": 63084, + "easel2": 63085, + "easel3-fill": 63086, + "easel3": 63087, + "fan": 63088, + "fingerprint": 63089, + "graph-down-arrow": 63090, + "graph-up-arrow": 63091, + "hypnotize": 63092, + "magic": 63093, + "person-rolodex": 63094, + "person-video": 63095, + "person-video2": 63096, + "person-video3": 63097, + "person-workspace": 63098, + "radioactive": 63099, + "webcam-fill": 63100, + "webcam": 63101, + "yin-yang": 63102, + "bandaid-fill": 63104, + "bandaid": 63105, + "bluetooth": 63106, + "body-text": 63107, + "boombox": 63108, + "boxes": 63109, + "dpad-fill": 63110, + "dpad": 63111, + "ear-fill": 63112, + "ear": 63113, + "envelope-check-fill": 63115, + "envelope-check": 63116, + "envelope-dash-fill": 63118, + "envelope-dash": 63119, + "envelope-exclamation-fill": 63121, + "envelope-exclamation": 63122, + "envelope-plus-fill": 63123, + "envelope-plus": 63124, + "envelope-slash-fill": 63126, + "envelope-slash": 63127, + "envelope-x-fill": 63129, + "envelope-x": 63130, + "explicit-fill": 63131, + "explicit": 63132, + "git": 63133, + "infinity": 63134, + "list-columns-reverse": 63135, + "list-columns": 63136, + "meta": 63137, + "nintendo-switch": 63140, + "pc-display-horizontal": 63141, + "pc-display": 63142, + "pc-horizontal": 63143, + "pc": 63144, + "playstation": 63145, + "plus-slash-minus": 63146, + "projector-fill": 63147, + "projector": 63148, + "qr-code-scan": 63149, + "qr-code": 63150, + "quora": 63151, + "quote": 63152, + "robot": 63153, + "send-check-fill": 63154, + "send-check": 63155, + "send-dash-fill": 63156, + "send-dash": 63157, + "send-exclamation-fill": 63159, + "send-exclamation": 63160, + "send-fill": 63161, + "send-plus-fill": 63162, + "send-plus": 63163, + "send-slash-fill": 63164, + "send-slash": 63165, + "send-x-fill": 63166, + "send-x": 63167, + "send": 63168, + "steam": 63169, + "terminal-dash": 63171, + "terminal-plus": 63172, + "terminal-split": 63173, + "ticket-detailed-fill": 63174, + "ticket-detailed": 63175, + "ticket-fill": 63176, + "ticket-perforated-fill": 63177, + "ticket-perforated": 63178, + "ticket": 63179, + "tiktok": 63180, + "window-dash": 63181, + "window-desktop": 63182, + "window-fullscreen": 63183, + "window-plus": 63184, + "window-split": 63185, + "window-stack": 63186, + "window-x": 63187, + "xbox": 63188, + "ethernet": 63189, + "hdmi-fill": 63190, + "hdmi": 63191, + "usb-c-fill": 63192, + "usb-c": 63193, + "usb-fill": 63194, + "usb-plug-fill": 63195, + "usb-plug": 63196, + "usb-symbol": 63197, + "usb": 63198, + "boombox-fill": 63199, + "displayport": 63201, + "gpu-card": 63202, + "memory": 63203, + "modem-fill": 63204, + "modem": 63205, + "motherboard-fill": 63206, + "motherboard": 63207, + "optical-audio-fill": 63208, + "optical-audio": 63209, + "pci-card": 63210, + "router-fill": 63211, + "router": 63212, + "thunderbolt-fill": 63215, + "thunderbolt": 63216, + "usb-drive-fill": 63217, + "usb-drive": 63218, + "usb-micro-fill": 63219, + "usb-micro": 63220, + "usb-mini-fill": 63221, + "usb-mini": 63222, + "cloud-haze2": 63223, + "device-hdd-fill": 63224, + "device-hdd": 63225, + "device-ssd-fill": 63226, + "device-ssd": 63227, + "displayport-fill": 63228, + "mortarboard-fill": 63229, + "mortarboard": 63230, + "terminal-x": 63231, + "arrow-through-heart-fill": 63232, + "arrow-through-heart": 63233, + "badge-sd-fill": 63234, + "badge-sd": 63235, + "bag-heart-fill": 63236, + "bag-heart": 63237, + "balloon-fill": 63238, + "balloon-heart-fill": 63239, + "balloon-heart": 63240, + "balloon": 63241, + "box2-fill": 63242, + "box2-heart-fill": 63243, + "box2-heart": 63244, + "box2": 63245, + "braces-asterisk": 63246, + "calendar-heart-fill": 63247, + "calendar-heart": 63248, + "calendar2-heart-fill": 63249, + "calendar2-heart": 63250, + "chat-heart-fill": 63251, + "chat-heart": 63252, + "chat-left-heart-fill": 63253, + "chat-left-heart": 63254, + "chat-right-heart-fill": 63255, + "chat-right-heart": 63256, + "chat-square-heart-fill": 63257, + "chat-square-heart": 63258, + "clipboard-check-fill": 63259, + "clipboard-data-fill": 63260, + "clipboard-fill": 63261, + "clipboard-heart-fill": 63262, + "clipboard-heart": 63263, + "clipboard-minus-fill": 63264, + "clipboard-plus-fill": 63265, + "clipboard-pulse": 63266, + "clipboard-x-fill": 63267, + "clipboard2-check-fill": 63268, + "clipboard2-check": 63269, + "clipboard2-data-fill": 63270, + "clipboard2-data": 63271, + "clipboard2-fill": 63272, + "clipboard2-heart-fill": 63273, + "clipboard2-heart": 63274, + "clipboard2-minus-fill": 63275, + "clipboard2-minus": 63276, + "clipboard2-plus-fill": 63277, + "clipboard2-plus": 63278, + "clipboard2-pulse-fill": 63279, + "clipboard2-pulse": 63280, + "clipboard2-x-fill": 63281, + "clipboard2-x": 63282, + "clipboard2": 63283, + "emoji-kiss-fill": 63284, + "emoji-kiss": 63285, + "envelope-heart-fill": 63286, + "envelope-heart": 63287, + "envelope-open-heart-fill": 63288, + "envelope-open-heart": 63289, + "envelope-paper-fill": 63290, + "envelope-paper-heart-fill": 63291, + "envelope-paper-heart": 63292, + "envelope-paper": 63293, + "filetype-aac": 63294, + "filetype-ai": 63295, + "filetype-bmp": 63296, + "filetype-cs": 63297, + "filetype-css": 63298, + "filetype-csv": 63299, + "filetype-doc": 63300, + "filetype-docx": 63301, + "filetype-exe": 63302, + "filetype-gif": 63303, + "filetype-heic": 63304, + "filetype-html": 63305, + "filetype-java": 63306, + "filetype-jpg": 63307, + "filetype-js": 63308, + "filetype-jsx": 63309, + "filetype-key": 63310, + "filetype-m4p": 63311, + "filetype-md": 63312, + "filetype-mdx": 63313, + "filetype-mov": 63314, + "filetype-mp3": 63315, + "filetype-mp4": 63316, + "filetype-otf": 63317, + "filetype-pdf": 63318, + "filetype-php": 63319, + "filetype-png": 63320, + "filetype-ppt": 63322, + "filetype-psd": 63323, + "filetype-py": 63324, + "filetype-raw": 63325, + "filetype-rb": 63326, + "filetype-sass": 63327, + "filetype-scss": 63328, + "filetype-sh": 63329, + "filetype-svg": 63330, + "filetype-tiff": 63331, + "filetype-tsx": 63332, + "filetype-ttf": 63333, + "filetype-txt": 63334, + "filetype-wav": 63335, + "filetype-woff": 63336, + "filetype-xls": 63338, + "filetype-xml": 63339, + "filetype-yml": 63340, + "heart-arrow": 63341, + "heart-pulse-fill": 63342, + "heart-pulse": 63343, + "heartbreak-fill": 63344, + "heartbreak": 63345, + "hearts": 63346, + "hospital-fill": 63347, + "hospital": 63348, + "house-heart-fill": 63349, + "house-heart": 63350, + "incognito": 63351, + "magnet-fill": 63352, + "magnet": 63353, + "person-heart": 63354, + "person-hearts": 63355, + "phone-flip": 63356, + "plugin": 63357, + "postage-fill": 63358, + "postage-heart-fill": 63359, + "postage-heart": 63360, + "postage": 63361, + "postcard-fill": 63362, + "postcard-heart-fill": 63363, + "postcard-heart": 63364, + "postcard": 63365, + "search-heart-fill": 63366, + "search-heart": 63367, + "sliders2-vertical": 63368, + "sliders2": 63369, + "trash3-fill": 63370, + "trash3": 63371, + "valentine": 63372, + "valentine2": 63373, + "wrench-adjustable-circle-fill": 63374, + "wrench-adjustable-circle": 63375, + "wrench-adjustable": 63376, + "filetype-json": 63377, + "filetype-pptx": 63378, + "filetype-xlsx": 63379, + "1-circle-fill": 63382, + "1-circle": 63383, + "1-square-fill": 63384, + "1-square": 63385, + "2-circle-fill": 63388, + "2-circle": 63389, + "2-square-fill": 63390, + "2-square": 63391, + "3-circle-fill": 63394, + "3-circle": 63395, + "3-square-fill": 63396, + "3-square": 63397, + "4-circle-fill": 63400, + "4-circle": 63401, + "4-square-fill": 63402, + "4-square": 63403, + "5-circle-fill": 63406, + "5-circle": 63407, + "5-square-fill": 63408, + "5-square": 63409, + "6-circle-fill": 63412, + "6-circle": 63413, + "6-square-fill": 63414, + "6-square": 63415, + "7-circle-fill": 63418, + "7-circle": 63419, + "7-square-fill": 63420, + "7-square": 63421, + "8-circle-fill": 63424, + "8-circle": 63425, + "8-square-fill": 63426, + "8-square": 63427, + "9-circle-fill": 63430, + "9-circle": 63431, + "9-square-fill": 63432, + "9-square": 63433, + "airplane-engines-fill": 63434, + "airplane-engines": 63435, + "airplane-fill": 63436, + "airplane": 63437, + "alexa": 63438, + "alipay": 63439, + "android": 63440, + "android2": 63441, + "box-fill": 63442, + "box-seam-fill": 63443, + "browser-chrome": 63444, + "browser-edge": 63445, + "browser-firefox": 63446, + "browser-safari": 63447, + "c-circle-fill": 63450, + "c-circle": 63451, + "c-square-fill": 63452, + "c-square": 63453, + "capsule-pill": 63454, + "capsule": 63455, + "car-front-fill": 63456, + "car-front": 63457, + "cassette-fill": 63458, + "cassette": 63459, + "cc-circle-fill": 63462, + "cc-circle": 63463, + "cc-square-fill": 63464, + "cc-square": 63465, + "cup-hot-fill": 63466, + "cup-hot": 63467, + "currency-rupee": 63468, + "dropbox": 63469, + "escape": 63470, + "fast-forward-btn-fill": 63471, + "fast-forward-btn": 63472, + "fast-forward-circle-fill": 63473, + "fast-forward-circle": 63474, + "fast-forward-fill": 63475, + "fast-forward": 63476, + "filetype-sql": 63477, + "fire": 63478, + "google-play": 63479, + "h-circle-fill": 63482, + "h-circle": 63483, + "h-square-fill": 63484, + "h-square": 63485, + "indent": 63486, + "lungs-fill": 63487, + "lungs": 63488, + "microsoft-teams": 63489, + "p-circle-fill": 63492, + "p-circle": 63493, + "p-square-fill": 63494, + "p-square": 63495, + "pass-fill": 63496, + "pass": 63497, + "prescription": 63498, + "prescription2": 63499, + "r-circle-fill": 63502, + "r-circle": 63503, + "r-square-fill": 63504, + "r-square": 63505, + "repeat-1": 63506, + "repeat": 63507, + "rewind-btn-fill": 63508, + "rewind-btn": 63509, + "rewind-circle-fill": 63510, + "rewind-circle": 63511, + "rewind-fill": 63512, + "rewind": 63513, + "train-freight-front-fill": 63514, + "train-freight-front": 63515, + "train-front-fill": 63516, + "train-front": 63517, + "train-lightrail-front-fill": 63518, + "train-lightrail-front": 63519, + "truck-front-fill": 63520, + "truck-front": 63521, + "ubuntu": 63522, + "unindent": 63523, + "unity": 63524, + "universal-access-circle": 63525, + "universal-access": 63526, + "virus": 63527, + "virus2": 63528, + "wechat": 63529, + "yelp": 63530, + "sign-stop-fill": 63531, + "sign-stop-lights-fill": 63532, + "sign-stop-lights": 63533, + "sign-stop": 63534, + "sign-turn-left-fill": 63535, + "sign-turn-left": 63536, + "sign-turn-right-fill": 63537, + "sign-turn-right": 63538, + "sign-turn-slight-left-fill": 63539, + "sign-turn-slight-left": 63540, + "sign-turn-slight-right-fill": 63541, + "sign-turn-slight-right": 63542, + "sign-yield-fill": 63543, + "sign-yield": 63544, + "ev-station-fill": 63545, + "ev-station": 63546, + "fuel-pump-diesel-fill": 63547, + "fuel-pump-diesel": 63548, + "fuel-pump-fill": 63549, + "fuel-pump": 63550, + "0-circle-fill": 63551, + "0-circle": 63552, + "0-square-fill": 63553, + "0-square": 63554, + "rocket-fill": 63555, + "rocket-takeoff-fill": 63556, + "rocket-takeoff": 63557, + "rocket": 63558, + "stripe": 63559, + "subscript": 63560, + "superscript": 63561, + "trello": 63562, + "envelope-at-fill": 63563, + "envelope-at": 63564, + "regex": 63565, + "text-wrap": 63566, + "sign-dead-end-fill": 63567, + "sign-dead-end": 63568, + "sign-do-not-enter-fill": 63569, + "sign-do-not-enter": 63570, + "sign-intersection-fill": 63571, + "sign-intersection-side-fill": 63572, + "sign-intersection-side": 63573, + "sign-intersection-t-fill": 63574, + "sign-intersection-t": 63575, + "sign-intersection-y-fill": 63576, + "sign-intersection-y": 63577, + "sign-intersection": 63578, + "sign-merge-left-fill": 63579, + "sign-merge-left": 63580, + "sign-merge-right-fill": 63581, + "sign-merge-right": 63582, + "sign-no-left-turn-fill": 63583, + "sign-no-left-turn": 63584, + "sign-no-parking-fill": 63585, + "sign-no-parking": 63586, + "sign-no-right-turn-fill": 63587, + "sign-no-right-turn": 63588, + "sign-railroad-fill": 63589, + "sign-railroad": 63590, + "building-add": 63591, + "building-check": 63592, + "building-dash": 63593, + "building-down": 63594, + "building-exclamation": 63595, + "building-fill-add": 63596, + "building-fill-check": 63597, + "building-fill-dash": 63598, + "building-fill-down": 63599, + "building-fill-exclamation": 63600, + "building-fill-gear": 63601, + "building-fill-lock": 63602, + "building-fill-slash": 63603, + "building-fill-up": 63604, + "building-fill-x": 63605, + "building-fill": 63606, + "building-gear": 63607, + "building-lock": 63608, + "building-slash": 63609, + "building-up": 63610, + "building-x": 63611, + "buildings-fill": 63612, + "buildings": 63613, + "bus-front-fill": 63614, + "bus-front": 63615, + "ev-front-fill": 63616, + "ev-front": 63617, + "globe-americas": 63618, + "globe-asia-australia": 63619, + "globe-central-south-asia": 63620, + "globe-europe-africa": 63621, + "house-add-fill": 63622, + "house-add": 63623, + "house-check-fill": 63624, + "house-check": 63625, + "house-dash-fill": 63626, + "house-dash": 63627, + "house-down-fill": 63628, + "house-down": 63629, + "house-exclamation-fill": 63630, + "house-exclamation": 63631, + "house-gear-fill": 63632, + "house-gear": 63633, + "house-lock-fill": 63634, + "house-lock": 63635, + "house-slash-fill": 63636, + "house-slash": 63637, + "house-up-fill": 63638, + "house-up": 63639, + "house-x-fill": 63640, + "house-x": 63641, + "person-add": 63642, + "person-down": 63643, + "person-exclamation": 63644, + "person-fill-add": 63645, + "person-fill-check": 63646, + "person-fill-dash": 63647, + "person-fill-down": 63648, + "person-fill-exclamation": 63649, + "person-fill-gear": 63650, + "person-fill-lock": 63651, + "person-fill-slash": 63652, + "person-fill-up": 63653, + "person-fill-x": 63654, + "person-gear": 63655, + "person-lock": 63656, + "person-slash": 63657, + "person-up": 63658, + "scooter": 63659, + "taxi-front-fill": 63660, + "taxi-front": 63661, + "amd": 63662, + "database-add": 63663, + "database-check": 63664, + "database-dash": 63665, + "database-down": 63666, + "database-exclamation": 63667, + "database-fill-add": 63668, + "database-fill-check": 63669, + "database-fill-dash": 63670, + "database-fill-down": 63671, + "database-fill-exclamation": 63672, + "database-fill-gear": 63673, + "database-fill-lock": 63674, + "database-fill-slash": 63675, + "database-fill-up": 63676, + "database-fill-x": 63677, + "database-fill": 63678, + "database-gear": 63679, + "database-lock": 63680, + "database-slash": 63681, + "database-up": 63682, + "database-x": 63683, + "database": 63684, + "houses-fill": 63685, + "houses": 63686, + "nvidia": 63687, + "person-vcard-fill": 63688, + "person-vcard": 63689, + "sina-weibo": 63690, + "tencent-qq": 63691, + "wikipedia": 63692, + "alphabet-uppercase": 62117, + "alphabet": 63114, + "amazon": 63117, + "arrows-collapse-vertical": 63120, + "arrows-expand-vertical": 63125, + "arrows-vertical": 63128, + "arrows": 63138, + "ban-fill": 63139, + "ban": 63158, + "bing": 63170, + "cake": 63200, + "cake2": 63213, + "cookie": 63214, + "copy": 63321, + "crosshair": 63337, + "crosshair2": 63380, + "emoji-astonished-fill": 63381, + "emoji-astonished": 63386, + "emoji-grimace-fill": 63387, + "emoji-grimace": 63392, + "emoji-grin-fill": 63393, + "emoji-grin": 63398, + "emoji-surprise-fill": 63399, + "emoji-surprise": 63404, + "emoji-tear-fill": 63405, + "emoji-tear": 63410, + "envelope-arrow-down-fill": 63411, + "envelope-arrow-down": 63416, + "envelope-arrow-up-fill": 63417, + "envelope-arrow-up": 63422, + "feather": 63423, + "feather2": 63428, + "floppy-fill": 63429, + "floppy": 63448, + "floppy2-fill": 63449, + "floppy2": 63460, + "gitlab": 63461, + "highlighter": 63480, + "marker-tip": 63490, + "nvme-fill": 63491, + "nvme": 63500, + "opencollective": 63501, + "pci-card-network": 63693, + "pci-card-sound": 63694, + "radar": 63695, + "send-arrow-down-fill": 63696, + "send-arrow-down": 63697, + "send-arrow-up-fill": 63698, + "send-arrow-up": 63699, + "sim-slash-fill": 63700, + "sim-slash": 63701, + "sourceforge": 63702, + "substack": 63703, + "threads-fill": 63704, + "threads": 63705, + "transparency": 63706, + "twitter-x": 63707, + "type-h4": 63708, + "type-h5": 63709, + "type-h6": 63710, + "backpack-fill": 63711, + "backpack": 63712, + "backpack2-fill": 63713, + "backpack2": 63714, + "backpack3-fill": 63715, + "backpack3": 63716, + "backpack4-fill": 63717, + "backpack4": 63718, + "brilliance": 63719, + "cake-fill": 63720, + "cake2-fill": 63721, + "duffle-fill": 63722, + "duffle": 63723, + "exposure": 63724, + "gender-neuter": 63725, + "highlights": 63726, + "luggage-fill": 63727, + "luggage": 63728, + "mailbox-flag": 63729, + "mailbox2-flag": 63730, + "noise-reduction": 63731, + "passport-fill": 63732, + "passport": 63733, + "person-arms-up": 63734, + "person-raised-hand": 63735, + "person-standing-dress": 63736, + "person-standing": 63737, + "person-walking": 63738, + "person-wheelchair": 63739, + "shadows": 63740, + "suitcase-fill": 63741, + "suitcase-lg-fill": 63742, + "suitcase-lg": 63743, + "suitcase": 63744, + "suitcase2-fill": 63745, + "suitcase2": 63746, + "vignette": 63747 +} \ No newline at end of file diff --git a/assets/static/bootstrap-icons/font/bootstrap-icons.min.css b/assets/static/bootstrap-icons/font/bootstrap-icons.min.css new file mode 100644 index 0000000..dadd6dc --- /dev/null +++ b/assets/static/bootstrap-icons/font/bootstrap-icons.min.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap Icons v1.11.3 (https://icons.getbootstrap.com/) + * Copyright 2019-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE) + */@font-face{font-display:block;font-family:bootstrap-icons;src:url("fonts/bootstrap-icons.woff2?dd67030699838ea613ee6dbda90effa6") format("woff2"),url("fonts/bootstrap-icons.woff?dd67030699838ea613ee6dbda90effa6") format("woff")}.bi::before,[class*=" bi-"]::before,[class^=bi-]::before{display:inline-block;font-family:bootstrap-icons!important;font-style:normal;font-weight:400!important;font-variant:normal;text-transform:none;line-height:1;vertical-align:-.125em;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.bi-123::before{content:"\f67f"}.bi-alarm-fill::before{content:"\f101"}.bi-alarm::before{content:"\f102"}.bi-align-bottom::before{content:"\f103"}.bi-align-center::before{content:"\f104"}.bi-align-end::before{content:"\f105"}.bi-align-middle::before{content:"\f106"}.bi-align-start::before{content:"\f107"}.bi-align-top::before{content:"\f108"}.bi-alt::before{content:"\f109"}.bi-app-indicator::before{content:"\f10a"}.bi-app::before{content:"\f10b"}.bi-archive-fill::before{content:"\f10c"}.bi-archive::before{content:"\f10d"}.bi-arrow-90deg-down::before{content:"\f10e"}.bi-arrow-90deg-left::before{content:"\f10f"}.bi-arrow-90deg-right::before{content:"\f110"}.bi-arrow-90deg-up::before{content:"\f111"}.bi-arrow-bar-down::before{content:"\f112"}.bi-arrow-bar-left::before{content:"\f113"}.bi-arrow-bar-right::before{content:"\f114"}.bi-arrow-bar-up::before{content:"\f115"}.bi-arrow-clockwise::before{content:"\f116"}.bi-arrow-counterclockwise::before{content:"\f117"}.bi-arrow-down-circle-fill::before{content:"\f118"}.bi-arrow-down-circle::before{content:"\f119"}.bi-arrow-down-left-circle-fill::before{content:"\f11a"}.bi-arrow-down-left-circle::before{content:"\f11b"}.bi-arrow-down-left-square-fill::before{content:"\f11c"}.bi-arrow-down-left-square::before{content:"\f11d"}.bi-arrow-down-left::before{content:"\f11e"}.bi-arrow-down-right-circle-fill::before{content:"\f11f"}.bi-arrow-down-right-circle::before{content:"\f120"}.bi-arrow-down-right-square-fill::before{content:"\f121"}.bi-arrow-down-right-square::before{content:"\f122"}.bi-arrow-down-right::before{content:"\f123"}.bi-arrow-down-short::before{content:"\f124"}.bi-arrow-down-square-fill::before{content:"\f125"}.bi-arrow-down-square::before{content:"\f126"}.bi-arrow-down-up::before{content:"\f127"}.bi-arrow-down::before{content:"\f128"}.bi-arrow-left-circle-fill::before{content:"\f129"}.bi-arrow-left-circle::before{content:"\f12a"}.bi-arrow-left-right::before{content:"\f12b"}.bi-arrow-left-short::before{content:"\f12c"}.bi-arrow-left-square-fill::before{content:"\f12d"}.bi-arrow-left-square::before{content:"\f12e"}.bi-arrow-left::before{content:"\f12f"}.bi-arrow-repeat::before{content:"\f130"}.bi-arrow-return-left::before{content:"\f131"}.bi-arrow-return-right::before{content:"\f132"}.bi-arrow-right-circle-fill::before{content:"\f133"}.bi-arrow-right-circle::before{content:"\f134"}.bi-arrow-right-short::before{content:"\f135"}.bi-arrow-right-square-fill::before{content:"\f136"}.bi-arrow-right-square::before{content:"\f137"}.bi-arrow-right::before{content:"\f138"}.bi-arrow-up-circle-fill::before{content:"\f139"}.bi-arrow-up-circle::before{content:"\f13a"}.bi-arrow-up-left-circle-fill::before{content:"\f13b"}.bi-arrow-up-left-circle::before{content:"\f13c"}.bi-arrow-up-left-square-fill::before{content:"\f13d"}.bi-arrow-up-left-square::before{content:"\f13e"}.bi-arrow-up-left::before{content:"\f13f"}.bi-arrow-up-right-circle-fill::before{content:"\f140"}.bi-arrow-up-right-circle::before{content:"\f141"}.bi-arrow-up-right-square-fill::before{content:"\f142"}.bi-arrow-up-right-square::before{content:"\f143"}.bi-arrow-up-right::before{content:"\f144"}.bi-arrow-up-short::before{content:"\f145"}.bi-arrow-up-square-fill::before{content:"\f146"}.bi-arrow-up-square::before{content:"\f147"}.bi-arrow-up::before{content:"\f148"}.bi-arrows-angle-contract::before{content:"\f149"}.bi-arrows-angle-expand::before{content:"\f14a"}.bi-arrows-collapse::before{content:"\f14b"}.bi-arrows-expand::before{content:"\f14c"}.bi-arrows-fullscreen::before{content:"\f14d"}.bi-arrows-move::before{content:"\f14e"}.bi-aspect-ratio-fill::before{content:"\f14f"}.bi-aspect-ratio::before{content:"\f150"}.bi-asterisk::before{content:"\f151"}.bi-at::before{content:"\f152"}.bi-award-fill::before{content:"\f153"}.bi-award::before{content:"\f154"}.bi-back::before{content:"\f155"}.bi-backspace-fill::before{content:"\f156"}.bi-backspace-reverse-fill::before{content:"\f157"}.bi-backspace-reverse::before{content:"\f158"}.bi-backspace::before{content:"\f159"}.bi-badge-3d-fill::before{content:"\f15a"}.bi-badge-3d::before{content:"\f15b"}.bi-badge-4k-fill::before{content:"\f15c"}.bi-badge-4k::before{content:"\f15d"}.bi-badge-8k-fill::before{content:"\f15e"}.bi-badge-8k::before{content:"\f15f"}.bi-badge-ad-fill::before{content:"\f160"}.bi-badge-ad::before{content:"\f161"}.bi-badge-ar-fill::before{content:"\f162"}.bi-badge-ar::before{content:"\f163"}.bi-badge-cc-fill::before{content:"\f164"}.bi-badge-cc::before{content:"\f165"}.bi-badge-hd-fill::before{content:"\f166"}.bi-badge-hd::before{content:"\f167"}.bi-badge-tm-fill::before{content:"\f168"}.bi-badge-tm::before{content:"\f169"}.bi-badge-vo-fill::before{content:"\f16a"}.bi-badge-vo::before{content:"\f16b"}.bi-badge-vr-fill::before{content:"\f16c"}.bi-badge-vr::before{content:"\f16d"}.bi-badge-wc-fill::before{content:"\f16e"}.bi-badge-wc::before{content:"\f16f"}.bi-bag-check-fill::before{content:"\f170"}.bi-bag-check::before{content:"\f171"}.bi-bag-dash-fill::before{content:"\f172"}.bi-bag-dash::before{content:"\f173"}.bi-bag-fill::before{content:"\f174"}.bi-bag-plus-fill::before{content:"\f175"}.bi-bag-plus::before{content:"\f176"}.bi-bag-x-fill::before{content:"\f177"}.bi-bag-x::before{content:"\f178"}.bi-bag::before{content:"\f179"}.bi-bar-chart-fill::before{content:"\f17a"}.bi-bar-chart-line-fill::before{content:"\f17b"}.bi-bar-chart-line::before{content:"\f17c"}.bi-bar-chart-steps::before{content:"\f17d"}.bi-bar-chart::before{content:"\f17e"}.bi-basket-fill::before{content:"\f17f"}.bi-basket::before{content:"\f180"}.bi-basket2-fill::before{content:"\f181"}.bi-basket2::before{content:"\f182"}.bi-basket3-fill::before{content:"\f183"}.bi-basket3::before{content:"\f184"}.bi-battery-charging::before{content:"\f185"}.bi-battery-full::before{content:"\f186"}.bi-battery-half::before{content:"\f187"}.bi-battery::before{content:"\f188"}.bi-bell-fill::before{content:"\f189"}.bi-bell::before{content:"\f18a"}.bi-bezier::before{content:"\f18b"}.bi-bezier2::before{content:"\f18c"}.bi-bicycle::before{content:"\f18d"}.bi-binoculars-fill::before{content:"\f18e"}.bi-binoculars::before{content:"\f18f"}.bi-blockquote-left::before{content:"\f190"}.bi-blockquote-right::before{content:"\f191"}.bi-book-fill::before{content:"\f192"}.bi-book-half::before{content:"\f193"}.bi-book::before{content:"\f194"}.bi-bookmark-check-fill::before{content:"\f195"}.bi-bookmark-check::before{content:"\f196"}.bi-bookmark-dash-fill::before{content:"\f197"}.bi-bookmark-dash::before{content:"\f198"}.bi-bookmark-fill::before{content:"\f199"}.bi-bookmark-heart-fill::before{content:"\f19a"}.bi-bookmark-heart::before{content:"\f19b"}.bi-bookmark-plus-fill::before{content:"\f19c"}.bi-bookmark-plus::before{content:"\f19d"}.bi-bookmark-star-fill::before{content:"\f19e"}.bi-bookmark-star::before{content:"\f19f"}.bi-bookmark-x-fill::before{content:"\f1a0"}.bi-bookmark-x::before{content:"\f1a1"}.bi-bookmark::before{content:"\f1a2"}.bi-bookmarks-fill::before{content:"\f1a3"}.bi-bookmarks::before{content:"\f1a4"}.bi-bookshelf::before{content:"\f1a5"}.bi-bootstrap-fill::before{content:"\f1a6"}.bi-bootstrap-reboot::before{content:"\f1a7"}.bi-bootstrap::before{content:"\f1a8"}.bi-border-all::before{content:"\f1a9"}.bi-border-bottom::before{content:"\f1aa"}.bi-border-center::before{content:"\f1ab"}.bi-border-inner::before{content:"\f1ac"}.bi-border-left::before{content:"\f1ad"}.bi-border-middle::before{content:"\f1ae"}.bi-border-outer::before{content:"\f1af"}.bi-border-right::before{content:"\f1b0"}.bi-border-style::before{content:"\f1b1"}.bi-border-top::before{content:"\f1b2"}.bi-border-width::before{content:"\f1b3"}.bi-border::before{content:"\f1b4"}.bi-bounding-box-circles::before{content:"\f1b5"}.bi-bounding-box::before{content:"\f1b6"}.bi-box-arrow-down-left::before{content:"\f1b7"}.bi-box-arrow-down-right::before{content:"\f1b8"}.bi-box-arrow-down::before{content:"\f1b9"}.bi-box-arrow-in-down-left::before{content:"\f1ba"}.bi-box-arrow-in-down-right::before{content:"\f1bb"}.bi-box-arrow-in-down::before{content:"\f1bc"}.bi-box-arrow-in-left::before{content:"\f1bd"}.bi-box-arrow-in-right::before{content:"\f1be"}.bi-box-arrow-in-up-left::before{content:"\f1bf"}.bi-box-arrow-in-up-right::before{content:"\f1c0"}.bi-box-arrow-in-up::before{content:"\f1c1"}.bi-box-arrow-left::before{content:"\f1c2"}.bi-box-arrow-right::before{content:"\f1c3"}.bi-box-arrow-up-left::before{content:"\f1c4"}.bi-box-arrow-up-right::before{content:"\f1c5"}.bi-box-arrow-up::before{content:"\f1c6"}.bi-box-seam::before{content:"\f1c7"}.bi-box::before{content:"\f1c8"}.bi-braces::before{content:"\f1c9"}.bi-bricks::before{content:"\f1ca"}.bi-briefcase-fill::before{content:"\f1cb"}.bi-briefcase::before{content:"\f1cc"}.bi-brightness-alt-high-fill::before{content:"\f1cd"}.bi-brightness-alt-high::before{content:"\f1ce"}.bi-brightness-alt-low-fill::before{content:"\f1cf"}.bi-brightness-alt-low::before{content:"\f1d0"}.bi-brightness-high-fill::before{content:"\f1d1"}.bi-brightness-high::before{content:"\f1d2"}.bi-brightness-low-fill::before{content:"\f1d3"}.bi-brightness-low::before{content:"\f1d4"}.bi-broadcast-pin::before{content:"\f1d5"}.bi-broadcast::before{content:"\f1d6"}.bi-brush-fill::before{content:"\f1d7"}.bi-brush::before{content:"\f1d8"}.bi-bucket-fill::before{content:"\f1d9"}.bi-bucket::before{content:"\f1da"}.bi-bug-fill::before{content:"\f1db"}.bi-bug::before{content:"\f1dc"}.bi-building::before{content:"\f1dd"}.bi-bullseye::before{content:"\f1de"}.bi-calculator-fill::before{content:"\f1df"}.bi-calculator::before{content:"\f1e0"}.bi-calendar-check-fill::before{content:"\f1e1"}.bi-calendar-check::before{content:"\f1e2"}.bi-calendar-date-fill::before{content:"\f1e3"}.bi-calendar-date::before{content:"\f1e4"}.bi-calendar-day-fill::before{content:"\f1e5"}.bi-calendar-day::before{content:"\f1e6"}.bi-calendar-event-fill::before{content:"\f1e7"}.bi-calendar-event::before{content:"\f1e8"}.bi-calendar-fill::before{content:"\f1e9"}.bi-calendar-minus-fill::before{content:"\f1ea"}.bi-calendar-minus::before{content:"\f1eb"}.bi-calendar-month-fill::before{content:"\f1ec"}.bi-calendar-month::before{content:"\f1ed"}.bi-calendar-plus-fill::before{content:"\f1ee"}.bi-calendar-plus::before{content:"\f1ef"}.bi-calendar-range-fill::before{content:"\f1f0"}.bi-calendar-range::before{content:"\f1f1"}.bi-calendar-week-fill::before{content:"\f1f2"}.bi-calendar-week::before{content:"\f1f3"}.bi-calendar-x-fill::before{content:"\f1f4"}.bi-calendar-x::before{content:"\f1f5"}.bi-calendar::before{content:"\f1f6"}.bi-calendar2-check-fill::before{content:"\f1f7"}.bi-calendar2-check::before{content:"\f1f8"}.bi-calendar2-date-fill::before{content:"\f1f9"}.bi-calendar2-date::before{content:"\f1fa"}.bi-calendar2-day-fill::before{content:"\f1fb"}.bi-calendar2-day::before{content:"\f1fc"}.bi-calendar2-event-fill::before{content:"\f1fd"}.bi-calendar2-event::before{content:"\f1fe"}.bi-calendar2-fill::before{content:"\f1ff"}.bi-calendar2-minus-fill::before{content:"\f200"}.bi-calendar2-minus::before{content:"\f201"}.bi-calendar2-month-fill::before{content:"\f202"}.bi-calendar2-month::before{content:"\f203"}.bi-calendar2-plus-fill::before{content:"\f204"}.bi-calendar2-plus::before{content:"\f205"}.bi-calendar2-range-fill::before{content:"\f206"}.bi-calendar2-range::before{content:"\f207"}.bi-calendar2-week-fill::before{content:"\f208"}.bi-calendar2-week::before{content:"\f209"}.bi-calendar2-x-fill::before{content:"\f20a"}.bi-calendar2-x::before{content:"\f20b"}.bi-calendar2::before{content:"\f20c"}.bi-calendar3-event-fill::before{content:"\f20d"}.bi-calendar3-event::before{content:"\f20e"}.bi-calendar3-fill::before{content:"\f20f"}.bi-calendar3-range-fill::before{content:"\f210"}.bi-calendar3-range::before{content:"\f211"}.bi-calendar3-week-fill::before{content:"\f212"}.bi-calendar3-week::before{content:"\f213"}.bi-calendar3::before{content:"\f214"}.bi-calendar4-event::before{content:"\f215"}.bi-calendar4-range::before{content:"\f216"}.bi-calendar4-week::before{content:"\f217"}.bi-calendar4::before{content:"\f218"}.bi-camera-fill::before{content:"\f219"}.bi-camera-reels-fill::before{content:"\f21a"}.bi-camera-reels::before{content:"\f21b"}.bi-camera-video-fill::before{content:"\f21c"}.bi-camera-video-off-fill::before{content:"\f21d"}.bi-camera-video-off::before{content:"\f21e"}.bi-camera-video::before{content:"\f21f"}.bi-camera::before{content:"\f220"}.bi-camera2::before{content:"\f221"}.bi-capslock-fill::before{content:"\f222"}.bi-capslock::before{content:"\f223"}.bi-card-checklist::before{content:"\f224"}.bi-card-heading::before{content:"\f225"}.bi-card-image::before{content:"\f226"}.bi-card-list::before{content:"\f227"}.bi-card-text::before{content:"\f228"}.bi-caret-down-fill::before{content:"\f229"}.bi-caret-down-square-fill::before{content:"\f22a"}.bi-caret-down-square::before{content:"\f22b"}.bi-caret-down::before{content:"\f22c"}.bi-caret-left-fill::before{content:"\f22d"}.bi-caret-left-square-fill::before{content:"\f22e"}.bi-caret-left-square::before{content:"\f22f"}.bi-caret-left::before{content:"\f230"}.bi-caret-right-fill::before{content:"\f231"}.bi-caret-right-square-fill::before{content:"\f232"}.bi-caret-right-square::before{content:"\f233"}.bi-caret-right::before{content:"\f234"}.bi-caret-up-fill::before{content:"\f235"}.bi-caret-up-square-fill::before{content:"\f236"}.bi-caret-up-square::before{content:"\f237"}.bi-caret-up::before{content:"\f238"}.bi-cart-check-fill::before{content:"\f239"}.bi-cart-check::before{content:"\f23a"}.bi-cart-dash-fill::before{content:"\f23b"}.bi-cart-dash::before{content:"\f23c"}.bi-cart-fill::before{content:"\f23d"}.bi-cart-plus-fill::before{content:"\f23e"}.bi-cart-plus::before{content:"\f23f"}.bi-cart-x-fill::before{content:"\f240"}.bi-cart-x::before{content:"\f241"}.bi-cart::before{content:"\f242"}.bi-cart2::before{content:"\f243"}.bi-cart3::before{content:"\f244"}.bi-cart4::before{content:"\f245"}.bi-cash-stack::before{content:"\f246"}.bi-cash::before{content:"\f247"}.bi-cast::before{content:"\f248"}.bi-chat-dots-fill::before{content:"\f249"}.bi-chat-dots::before{content:"\f24a"}.bi-chat-fill::before{content:"\f24b"}.bi-chat-left-dots-fill::before{content:"\f24c"}.bi-chat-left-dots::before{content:"\f24d"}.bi-chat-left-fill::before{content:"\f24e"}.bi-chat-left-quote-fill::before{content:"\f24f"}.bi-chat-left-quote::before{content:"\f250"}.bi-chat-left-text-fill::before{content:"\f251"}.bi-chat-left-text::before{content:"\f252"}.bi-chat-left::before{content:"\f253"}.bi-chat-quote-fill::before{content:"\f254"}.bi-chat-quote::before{content:"\f255"}.bi-chat-right-dots-fill::before{content:"\f256"}.bi-chat-right-dots::before{content:"\f257"}.bi-chat-right-fill::before{content:"\f258"}.bi-chat-right-quote-fill::before{content:"\f259"}.bi-chat-right-quote::before{content:"\f25a"}.bi-chat-right-text-fill::before{content:"\f25b"}.bi-chat-right-text::before{content:"\f25c"}.bi-chat-right::before{content:"\f25d"}.bi-chat-square-dots-fill::before{content:"\f25e"}.bi-chat-square-dots::before{content:"\f25f"}.bi-chat-square-fill::before{content:"\f260"}.bi-chat-square-quote-fill::before{content:"\f261"}.bi-chat-square-quote::before{content:"\f262"}.bi-chat-square-text-fill::before{content:"\f263"}.bi-chat-square-text::before{content:"\f264"}.bi-chat-square::before{content:"\f265"}.bi-chat-text-fill::before{content:"\f266"}.bi-chat-text::before{content:"\f267"}.bi-chat::before{content:"\f268"}.bi-check-all::before{content:"\f269"}.bi-check-circle-fill::before{content:"\f26a"}.bi-check-circle::before{content:"\f26b"}.bi-check-square-fill::before{content:"\f26c"}.bi-check-square::before{content:"\f26d"}.bi-check::before{content:"\f26e"}.bi-check2-all::before{content:"\f26f"}.bi-check2-circle::before{content:"\f270"}.bi-check2-square::before{content:"\f271"}.bi-check2::before{content:"\f272"}.bi-chevron-bar-contract::before{content:"\f273"}.bi-chevron-bar-down::before{content:"\f274"}.bi-chevron-bar-expand::before{content:"\f275"}.bi-chevron-bar-left::before{content:"\f276"}.bi-chevron-bar-right::before{content:"\f277"}.bi-chevron-bar-up::before{content:"\f278"}.bi-chevron-compact-down::before{content:"\f279"}.bi-chevron-compact-left::before{content:"\f27a"}.bi-chevron-compact-right::before{content:"\f27b"}.bi-chevron-compact-up::before{content:"\f27c"}.bi-chevron-contract::before{content:"\f27d"}.bi-chevron-double-down::before{content:"\f27e"}.bi-chevron-double-left::before{content:"\f27f"}.bi-chevron-double-right::before{content:"\f280"}.bi-chevron-double-up::before{content:"\f281"}.bi-chevron-down::before{content:"\f282"}.bi-chevron-expand::before{content:"\f283"}.bi-chevron-left::before{content:"\f284"}.bi-chevron-right::before{content:"\f285"}.bi-chevron-up::before{content:"\f286"}.bi-circle-fill::before{content:"\f287"}.bi-circle-half::before{content:"\f288"}.bi-circle-square::before{content:"\f289"}.bi-circle::before{content:"\f28a"}.bi-clipboard-check::before{content:"\f28b"}.bi-clipboard-data::before{content:"\f28c"}.bi-clipboard-minus::before{content:"\f28d"}.bi-clipboard-plus::before{content:"\f28e"}.bi-clipboard-x::before{content:"\f28f"}.bi-clipboard::before{content:"\f290"}.bi-clock-fill::before{content:"\f291"}.bi-clock-history::before{content:"\f292"}.bi-clock::before{content:"\f293"}.bi-cloud-arrow-down-fill::before{content:"\f294"}.bi-cloud-arrow-down::before{content:"\f295"}.bi-cloud-arrow-up-fill::before{content:"\f296"}.bi-cloud-arrow-up::before{content:"\f297"}.bi-cloud-check-fill::before{content:"\f298"}.bi-cloud-check::before{content:"\f299"}.bi-cloud-download-fill::before{content:"\f29a"}.bi-cloud-download::before{content:"\f29b"}.bi-cloud-drizzle-fill::before{content:"\f29c"}.bi-cloud-drizzle::before{content:"\f29d"}.bi-cloud-fill::before{content:"\f29e"}.bi-cloud-fog-fill::before{content:"\f29f"}.bi-cloud-fog::before{content:"\f2a0"}.bi-cloud-fog2-fill::before{content:"\f2a1"}.bi-cloud-fog2::before{content:"\f2a2"}.bi-cloud-hail-fill::before{content:"\f2a3"}.bi-cloud-hail::before{content:"\f2a4"}.bi-cloud-haze-fill::before{content:"\f2a6"}.bi-cloud-haze::before{content:"\f2a7"}.bi-cloud-haze2-fill::before{content:"\f2a8"}.bi-cloud-lightning-fill::before{content:"\f2a9"}.bi-cloud-lightning-rain-fill::before{content:"\f2aa"}.bi-cloud-lightning-rain::before{content:"\f2ab"}.bi-cloud-lightning::before{content:"\f2ac"}.bi-cloud-minus-fill::before{content:"\f2ad"}.bi-cloud-minus::before{content:"\f2ae"}.bi-cloud-moon-fill::before{content:"\f2af"}.bi-cloud-moon::before{content:"\f2b0"}.bi-cloud-plus-fill::before{content:"\f2b1"}.bi-cloud-plus::before{content:"\f2b2"}.bi-cloud-rain-fill::before{content:"\f2b3"}.bi-cloud-rain-heavy-fill::before{content:"\f2b4"}.bi-cloud-rain-heavy::before{content:"\f2b5"}.bi-cloud-rain::before{content:"\f2b6"}.bi-cloud-slash-fill::before{content:"\f2b7"}.bi-cloud-slash::before{content:"\f2b8"}.bi-cloud-sleet-fill::before{content:"\f2b9"}.bi-cloud-sleet::before{content:"\f2ba"}.bi-cloud-snow-fill::before{content:"\f2bb"}.bi-cloud-snow::before{content:"\f2bc"}.bi-cloud-sun-fill::before{content:"\f2bd"}.bi-cloud-sun::before{content:"\f2be"}.bi-cloud-upload-fill::before{content:"\f2bf"}.bi-cloud-upload::before{content:"\f2c0"}.bi-cloud::before{content:"\f2c1"}.bi-clouds-fill::before{content:"\f2c2"}.bi-clouds::before{content:"\f2c3"}.bi-cloudy-fill::before{content:"\f2c4"}.bi-cloudy::before{content:"\f2c5"}.bi-code-slash::before{content:"\f2c6"}.bi-code-square::before{content:"\f2c7"}.bi-code::before{content:"\f2c8"}.bi-collection-fill::before{content:"\f2c9"}.bi-collection-play-fill::before{content:"\f2ca"}.bi-collection-play::before{content:"\f2cb"}.bi-collection::before{content:"\f2cc"}.bi-columns-gap::before{content:"\f2cd"}.bi-columns::before{content:"\f2ce"}.bi-command::before{content:"\f2cf"}.bi-compass-fill::before{content:"\f2d0"}.bi-compass::before{content:"\f2d1"}.bi-cone-striped::before{content:"\f2d2"}.bi-cone::before{content:"\f2d3"}.bi-controller::before{content:"\f2d4"}.bi-cpu-fill::before{content:"\f2d5"}.bi-cpu::before{content:"\f2d6"}.bi-credit-card-2-back-fill::before{content:"\f2d7"}.bi-credit-card-2-back::before{content:"\f2d8"}.bi-credit-card-2-front-fill::before{content:"\f2d9"}.bi-credit-card-2-front::before{content:"\f2da"}.bi-credit-card-fill::before{content:"\f2db"}.bi-credit-card::before{content:"\f2dc"}.bi-crop::before{content:"\f2dd"}.bi-cup-fill::before{content:"\f2de"}.bi-cup-straw::before{content:"\f2df"}.bi-cup::before{content:"\f2e0"}.bi-cursor-fill::before{content:"\f2e1"}.bi-cursor-text::before{content:"\f2e2"}.bi-cursor::before{content:"\f2e3"}.bi-dash-circle-dotted::before{content:"\f2e4"}.bi-dash-circle-fill::before{content:"\f2e5"}.bi-dash-circle::before{content:"\f2e6"}.bi-dash-square-dotted::before{content:"\f2e7"}.bi-dash-square-fill::before{content:"\f2e8"}.bi-dash-square::before{content:"\f2e9"}.bi-dash::before{content:"\f2ea"}.bi-diagram-2-fill::before{content:"\f2eb"}.bi-diagram-2::before{content:"\f2ec"}.bi-diagram-3-fill::before{content:"\f2ed"}.bi-diagram-3::before{content:"\f2ee"}.bi-diamond-fill::before{content:"\f2ef"}.bi-diamond-half::before{content:"\f2f0"}.bi-diamond::before{content:"\f2f1"}.bi-dice-1-fill::before{content:"\f2f2"}.bi-dice-1::before{content:"\f2f3"}.bi-dice-2-fill::before{content:"\f2f4"}.bi-dice-2::before{content:"\f2f5"}.bi-dice-3-fill::before{content:"\f2f6"}.bi-dice-3::before{content:"\f2f7"}.bi-dice-4-fill::before{content:"\f2f8"}.bi-dice-4::before{content:"\f2f9"}.bi-dice-5-fill::before{content:"\f2fa"}.bi-dice-5::before{content:"\f2fb"}.bi-dice-6-fill::before{content:"\f2fc"}.bi-dice-6::before{content:"\f2fd"}.bi-disc-fill::before{content:"\f2fe"}.bi-disc::before{content:"\f2ff"}.bi-discord::before{content:"\f300"}.bi-display-fill::before{content:"\f301"}.bi-display::before{content:"\f302"}.bi-distribute-horizontal::before{content:"\f303"}.bi-distribute-vertical::before{content:"\f304"}.bi-door-closed-fill::before{content:"\f305"}.bi-door-closed::before{content:"\f306"}.bi-door-open-fill::before{content:"\f307"}.bi-door-open::before{content:"\f308"}.bi-dot::before{content:"\f309"}.bi-download::before{content:"\f30a"}.bi-droplet-fill::before{content:"\f30b"}.bi-droplet-half::before{content:"\f30c"}.bi-droplet::before{content:"\f30d"}.bi-earbuds::before{content:"\f30e"}.bi-easel-fill::before{content:"\f30f"}.bi-easel::before{content:"\f310"}.bi-egg-fill::before{content:"\f311"}.bi-egg-fried::before{content:"\f312"}.bi-egg::before{content:"\f313"}.bi-eject-fill::before{content:"\f314"}.bi-eject::before{content:"\f315"}.bi-emoji-angry-fill::before{content:"\f316"}.bi-emoji-angry::before{content:"\f317"}.bi-emoji-dizzy-fill::before{content:"\f318"}.bi-emoji-dizzy::before{content:"\f319"}.bi-emoji-expressionless-fill::before{content:"\f31a"}.bi-emoji-expressionless::before{content:"\f31b"}.bi-emoji-frown-fill::before{content:"\f31c"}.bi-emoji-frown::before{content:"\f31d"}.bi-emoji-heart-eyes-fill::before{content:"\f31e"}.bi-emoji-heart-eyes::before{content:"\f31f"}.bi-emoji-laughing-fill::before{content:"\f320"}.bi-emoji-laughing::before{content:"\f321"}.bi-emoji-neutral-fill::before{content:"\f322"}.bi-emoji-neutral::before{content:"\f323"}.bi-emoji-smile-fill::before{content:"\f324"}.bi-emoji-smile-upside-down-fill::before{content:"\f325"}.bi-emoji-smile-upside-down::before{content:"\f326"}.bi-emoji-smile::before{content:"\f327"}.bi-emoji-sunglasses-fill::before{content:"\f328"}.bi-emoji-sunglasses::before{content:"\f329"}.bi-emoji-wink-fill::before{content:"\f32a"}.bi-emoji-wink::before{content:"\f32b"}.bi-envelope-fill::before{content:"\f32c"}.bi-envelope-open-fill::before{content:"\f32d"}.bi-envelope-open::before{content:"\f32e"}.bi-envelope::before{content:"\f32f"}.bi-eraser-fill::before{content:"\f330"}.bi-eraser::before{content:"\f331"}.bi-exclamation-circle-fill::before{content:"\f332"}.bi-exclamation-circle::before{content:"\f333"}.bi-exclamation-diamond-fill::before{content:"\f334"}.bi-exclamation-diamond::before{content:"\f335"}.bi-exclamation-octagon-fill::before{content:"\f336"}.bi-exclamation-octagon::before{content:"\f337"}.bi-exclamation-square-fill::before{content:"\f338"}.bi-exclamation-square::before{content:"\f339"}.bi-exclamation-triangle-fill::before{content:"\f33a"}.bi-exclamation-triangle::before{content:"\f33b"}.bi-exclamation::before{content:"\f33c"}.bi-exclude::before{content:"\f33d"}.bi-eye-fill::before{content:"\f33e"}.bi-eye-slash-fill::before{content:"\f33f"}.bi-eye-slash::before{content:"\f340"}.bi-eye::before{content:"\f341"}.bi-eyedropper::before{content:"\f342"}.bi-eyeglasses::before{content:"\f343"}.bi-facebook::before{content:"\f344"}.bi-file-arrow-down-fill::before{content:"\f345"}.bi-file-arrow-down::before{content:"\f346"}.bi-file-arrow-up-fill::before{content:"\f347"}.bi-file-arrow-up::before{content:"\f348"}.bi-file-bar-graph-fill::before{content:"\f349"}.bi-file-bar-graph::before{content:"\f34a"}.bi-file-binary-fill::before{content:"\f34b"}.bi-file-binary::before{content:"\f34c"}.bi-file-break-fill::before{content:"\f34d"}.bi-file-break::before{content:"\f34e"}.bi-file-check-fill::before{content:"\f34f"}.bi-file-check::before{content:"\f350"}.bi-file-code-fill::before{content:"\f351"}.bi-file-code::before{content:"\f352"}.bi-file-diff-fill::before{content:"\f353"}.bi-file-diff::before{content:"\f354"}.bi-file-earmark-arrow-down-fill::before{content:"\f355"}.bi-file-earmark-arrow-down::before{content:"\f356"}.bi-file-earmark-arrow-up-fill::before{content:"\f357"}.bi-file-earmark-arrow-up::before{content:"\f358"}.bi-file-earmark-bar-graph-fill::before{content:"\f359"}.bi-file-earmark-bar-graph::before{content:"\f35a"}.bi-file-earmark-binary-fill::before{content:"\f35b"}.bi-file-earmark-binary::before{content:"\f35c"}.bi-file-earmark-break-fill::before{content:"\f35d"}.bi-file-earmark-break::before{content:"\f35e"}.bi-file-earmark-check-fill::before{content:"\f35f"}.bi-file-earmark-check::before{content:"\f360"}.bi-file-earmark-code-fill::before{content:"\f361"}.bi-file-earmark-code::before{content:"\f362"}.bi-file-earmark-diff-fill::before{content:"\f363"}.bi-file-earmark-diff::before{content:"\f364"}.bi-file-earmark-easel-fill::before{content:"\f365"}.bi-file-earmark-easel::before{content:"\f366"}.bi-file-earmark-excel-fill::before{content:"\f367"}.bi-file-earmark-excel::before{content:"\f368"}.bi-file-earmark-fill::before{content:"\f369"}.bi-file-earmark-font-fill::before{content:"\f36a"}.bi-file-earmark-font::before{content:"\f36b"}.bi-file-earmark-image-fill::before{content:"\f36c"}.bi-file-earmark-image::before{content:"\f36d"}.bi-file-earmark-lock-fill::before{content:"\f36e"}.bi-file-earmark-lock::before{content:"\f36f"}.bi-file-earmark-lock2-fill::before{content:"\f370"}.bi-file-earmark-lock2::before{content:"\f371"}.bi-file-earmark-medical-fill::before{content:"\f372"}.bi-file-earmark-medical::before{content:"\f373"}.bi-file-earmark-minus-fill::before{content:"\f374"}.bi-file-earmark-minus::before{content:"\f375"}.bi-file-earmark-music-fill::before{content:"\f376"}.bi-file-earmark-music::before{content:"\f377"}.bi-file-earmark-person-fill::before{content:"\f378"}.bi-file-earmark-person::before{content:"\f379"}.bi-file-earmark-play-fill::before{content:"\f37a"}.bi-file-earmark-play::before{content:"\f37b"}.bi-file-earmark-plus-fill::before{content:"\f37c"}.bi-file-earmark-plus::before{content:"\f37d"}.bi-file-earmark-post-fill::before{content:"\f37e"}.bi-file-earmark-post::before{content:"\f37f"}.bi-file-earmark-ppt-fill::before{content:"\f380"}.bi-file-earmark-ppt::before{content:"\f381"}.bi-file-earmark-richtext-fill::before{content:"\f382"}.bi-file-earmark-richtext::before{content:"\f383"}.bi-file-earmark-ruled-fill::before{content:"\f384"}.bi-file-earmark-ruled::before{content:"\f385"}.bi-file-earmark-slides-fill::before{content:"\f386"}.bi-file-earmark-slides::before{content:"\f387"}.bi-file-earmark-spreadsheet-fill::before{content:"\f388"}.bi-file-earmark-spreadsheet::before{content:"\f389"}.bi-file-earmark-text-fill::before{content:"\f38a"}.bi-file-earmark-text::before{content:"\f38b"}.bi-file-earmark-word-fill::before{content:"\f38c"}.bi-file-earmark-word::before{content:"\f38d"}.bi-file-earmark-x-fill::before{content:"\f38e"}.bi-file-earmark-x::before{content:"\f38f"}.bi-file-earmark-zip-fill::before{content:"\f390"}.bi-file-earmark-zip::before{content:"\f391"}.bi-file-earmark::before{content:"\f392"}.bi-file-easel-fill::before{content:"\f393"}.bi-file-easel::before{content:"\f394"}.bi-file-excel-fill::before{content:"\f395"}.bi-file-excel::before{content:"\f396"}.bi-file-fill::before{content:"\f397"}.bi-file-font-fill::before{content:"\f398"}.bi-file-font::before{content:"\f399"}.bi-file-image-fill::before{content:"\f39a"}.bi-file-image::before{content:"\f39b"}.bi-file-lock-fill::before{content:"\f39c"}.bi-file-lock::before{content:"\f39d"}.bi-file-lock2-fill::before{content:"\f39e"}.bi-file-lock2::before{content:"\f39f"}.bi-file-medical-fill::before{content:"\f3a0"}.bi-file-medical::before{content:"\f3a1"}.bi-file-minus-fill::before{content:"\f3a2"}.bi-file-minus::before{content:"\f3a3"}.bi-file-music-fill::before{content:"\f3a4"}.bi-file-music::before{content:"\f3a5"}.bi-file-person-fill::before{content:"\f3a6"}.bi-file-person::before{content:"\f3a7"}.bi-file-play-fill::before{content:"\f3a8"}.bi-file-play::before{content:"\f3a9"}.bi-file-plus-fill::before{content:"\f3aa"}.bi-file-plus::before{content:"\f3ab"}.bi-file-post-fill::before{content:"\f3ac"}.bi-file-post::before{content:"\f3ad"}.bi-file-ppt-fill::before{content:"\f3ae"}.bi-file-ppt::before{content:"\f3af"}.bi-file-richtext-fill::before{content:"\f3b0"}.bi-file-richtext::before{content:"\f3b1"}.bi-file-ruled-fill::before{content:"\f3b2"}.bi-file-ruled::before{content:"\f3b3"}.bi-file-slides-fill::before{content:"\f3b4"}.bi-file-slides::before{content:"\f3b5"}.bi-file-spreadsheet-fill::before{content:"\f3b6"}.bi-file-spreadsheet::before{content:"\f3b7"}.bi-file-text-fill::before{content:"\f3b8"}.bi-file-text::before{content:"\f3b9"}.bi-file-word-fill::before{content:"\f3ba"}.bi-file-word::before{content:"\f3bb"}.bi-file-x-fill::before{content:"\f3bc"}.bi-file-x::before{content:"\f3bd"}.bi-file-zip-fill::before{content:"\f3be"}.bi-file-zip::before{content:"\f3bf"}.bi-file::before{content:"\f3c0"}.bi-files-alt::before{content:"\f3c1"}.bi-files::before{content:"\f3c2"}.bi-film::before{content:"\f3c3"}.bi-filter-circle-fill::before{content:"\f3c4"}.bi-filter-circle::before{content:"\f3c5"}.bi-filter-left::before{content:"\f3c6"}.bi-filter-right::before{content:"\f3c7"}.bi-filter-square-fill::before{content:"\f3c8"}.bi-filter-square::before{content:"\f3c9"}.bi-filter::before{content:"\f3ca"}.bi-flag-fill::before{content:"\f3cb"}.bi-flag::before{content:"\f3cc"}.bi-flower1::before{content:"\f3cd"}.bi-flower2::before{content:"\f3ce"}.bi-flower3::before{content:"\f3cf"}.bi-folder-check::before{content:"\f3d0"}.bi-folder-fill::before{content:"\f3d1"}.bi-folder-minus::before{content:"\f3d2"}.bi-folder-plus::before{content:"\f3d3"}.bi-folder-symlink-fill::before{content:"\f3d4"}.bi-folder-symlink::before{content:"\f3d5"}.bi-folder-x::before{content:"\f3d6"}.bi-folder::before{content:"\f3d7"}.bi-folder2-open::before{content:"\f3d8"}.bi-folder2::before{content:"\f3d9"}.bi-fonts::before{content:"\f3da"}.bi-forward-fill::before{content:"\f3db"}.bi-forward::before{content:"\f3dc"}.bi-front::before{content:"\f3dd"}.bi-fullscreen-exit::before{content:"\f3de"}.bi-fullscreen::before{content:"\f3df"}.bi-funnel-fill::before{content:"\f3e0"}.bi-funnel::before{content:"\f3e1"}.bi-gear-fill::before{content:"\f3e2"}.bi-gear-wide-connected::before{content:"\f3e3"}.bi-gear-wide::before{content:"\f3e4"}.bi-gear::before{content:"\f3e5"}.bi-gem::before{content:"\f3e6"}.bi-geo-alt-fill::before{content:"\f3e7"}.bi-geo-alt::before{content:"\f3e8"}.bi-geo-fill::before{content:"\f3e9"}.bi-geo::before{content:"\f3ea"}.bi-gift-fill::before{content:"\f3eb"}.bi-gift::before{content:"\f3ec"}.bi-github::before{content:"\f3ed"}.bi-globe::before{content:"\f3ee"}.bi-globe2::before{content:"\f3ef"}.bi-google::before{content:"\f3f0"}.bi-graph-down::before{content:"\f3f1"}.bi-graph-up::before{content:"\f3f2"}.bi-grid-1x2-fill::before{content:"\f3f3"}.bi-grid-1x2::before{content:"\f3f4"}.bi-grid-3x2-gap-fill::before{content:"\f3f5"}.bi-grid-3x2-gap::before{content:"\f3f6"}.bi-grid-3x2::before{content:"\f3f7"}.bi-grid-3x3-gap-fill::before{content:"\f3f8"}.bi-grid-3x3-gap::before{content:"\f3f9"}.bi-grid-3x3::before{content:"\f3fa"}.bi-grid-fill::before{content:"\f3fb"}.bi-grid::before{content:"\f3fc"}.bi-grip-horizontal::before{content:"\f3fd"}.bi-grip-vertical::before{content:"\f3fe"}.bi-hammer::before{content:"\f3ff"}.bi-hand-index-fill::before{content:"\f400"}.bi-hand-index-thumb-fill::before{content:"\f401"}.bi-hand-index-thumb::before{content:"\f402"}.bi-hand-index::before{content:"\f403"}.bi-hand-thumbs-down-fill::before{content:"\f404"}.bi-hand-thumbs-down::before{content:"\f405"}.bi-hand-thumbs-up-fill::before{content:"\f406"}.bi-hand-thumbs-up::before{content:"\f407"}.bi-handbag-fill::before{content:"\f408"}.bi-handbag::before{content:"\f409"}.bi-hash::before{content:"\f40a"}.bi-hdd-fill::before{content:"\f40b"}.bi-hdd-network-fill::before{content:"\f40c"}.bi-hdd-network::before{content:"\f40d"}.bi-hdd-rack-fill::before{content:"\f40e"}.bi-hdd-rack::before{content:"\f40f"}.bi-hdd-stack-fill::before{content:"\f410"}.bi-hdd-stack::before{content:"\f411"}.bi-hdd::before{content:"\f412"}.bi-headphones::before{content:"\f413"}.bi-headset::before{content:"\f414"}.bi-heart-fill::before{content:"\f415"}.bi-heart-half::before{content:"\f416"}.bi-heart::before{content:"\f417"}.bi-heptagon-fill::before{content:"\f418"}.bi-heptagon-half::before{content:"\f419"}.bi-heptagon::before{content:"\f41a"}.bi-hexagon-fill::before{content:"\f41b"}.bi-hexagon-half::before{content:"\f41c"}.bi-hexagon::before{content:"\f41d"}.bi-hourglass-bottom::before{content:"\f41e"}.bi-hourglass-split::before{content:"\f41f"}.bi-hourglass-top::before{content:"\f420"}.bi-hourglass::before{content:"\f421"}.bi-house-door-fill::before{content:"\f422"}.bi-house-door::before{content:"\f423"}.bi-house-fill::before{content:"\f424"}.bi-house::before{content:"\f425"}.bi-hr::before{content:"\f426"}.bi-hurricane::before{content:"\f427"}.bi-image-alt::before{content:"\f428"}.bi-image-fill::before{content:"\f429"}.bi-image::before{content:"\f42a"}.bi-images::before{content:"\f42b"}.bi-inbox-fill::before{content:"\f42c"}.bi-inbox::before{content:"\f42d"}.bi-inboxes-fill::before{content:"\f42e"}.bi-inboxes::before{content:"\f42f"}.bi-info-circle-fill::before{content:"\f430"}.bi-info-circle::before{content:"\f431"}.bi-info-square-fill::before{content:"\f432"}.bi-info-square::before{content:"\f433"}.bi-info::before{content:"\f434"}.bi-input-cursor-text::before{content:"\f435"}.bi-input-cursor::before{content:"\f436"}.bi-instagram::before{content:"\f437"}.bi-intersect::before{content:"\f438"}.bi-journal-album::before{content:"\f439"}.bi-journal-arrow-down::before{content:"\f43a"}.bi-journal-arrow-up::before{content:"\f43b"}.bi-journal-bookmark-fill::before{content:"\f43c"}.bi-journal-bookmark::before{content:"\f43d"}.bi-journal-check::before{content:"\f43e"}.bi-journal-code::before{content:"\f43f"}.bi-journal-medical::before{content:"\f440"}.bi-journal-minus::before{content:"\f441"}.bi-journal-plus::before{content:"\f442"}.bi-journal-richtext::before{content:"\f443"}.bi-journal-text::before{content:"\f444"}.bi-journal-x::before{content:"\f445"}.bi-journal::before{content:"\f446"}.bi-journals::before{content:"\f447"}.bi-joystick::before{content:"\f448"}.bi-justify-left::before{content:"\f449"}.bi-justify-right::before{content:"\f44a"}.bi-justify::before{content:"\f44b"}.bi-kanban-fill::before{content:"\f44c"}.bi-kanban::before{content:"\f44d"}.bi-key-fill::before{content:"\f44e"}.bi-key::before{content:"\f44f"}.bi-keyboard-fill::before{content:"\f450"}.bi-keyboard::before{content:"\f451"}.bi-ladder::before{content:"\f452"}.bi-lamp-fill::before{content:"\f453"}.bi-lamp::before{content:"\f454"}.bi-laptop-fill::before{content:"\f455"}.bi-laptop::before{content:"\f456"}.bi-layer-backward::before{content:"\f457"}.bi-layer-forward::before{content:"\f458"}.bi-layers-fill::before{content:"\f459"}.bi-layers-half::before{content:"\f45a"}.bi-layers::before{content:"\f45b"}.bi-layout-sidebar-inset-reverse::before{content:"\f45c"}.bi-layout-sidebar-inset::before{content:"\f45d"}.bi-layout-sidebar-reverse::before{content:"\f45e"}.bi-layout-sidebar::before{content:"\f45f"}.bi-layout-split::before{content:"\f460"}.bi-layout-text-sidebar-reverse::before{content:"\f461"}.bi-layout-text-sidebar::before{content:"\f462"}.bi-layout-text-window-reverse::before{content:"\f463"}.bi-layout-text-window::before{content:"\f464"}.bi-layout-three-columns::before{content:"\f465"}.bi-layout-wtf::before{content:"\f466"}.bi-life-preserver::before{content:"\f467"}.bi-lightbulb-fill::before{content:"\f468"}.bi-lightbulb-off-fill::before{content:"\f469"}.bi-lightbulb-off::before{content:"\f46a"}.bi-lightbulb::before{content:"\f46b"}.bi-lightning-charge-fill::before{content:"\f46c"}.bi-lightning-charge::before{content:"\f46d"}.bi-lightning-fill::before{content:"\f46e"}.bi-lightning::before{content:"\f46f"}.bi-link-45deg::before{content:"\f470"}.bi-link::before{content:"\f471"}.bi-linkedin::before{content:"\f472"}.bi-list-check::before{content:"\f473"}.bi-list-nested::before{content:"\f474"}.bi-list-ol::before{content:"\f475"}.bi-list-stars::before{content:"\f476"}.bi-list-task::before{content:"\f477"}.bi-list-ul::before{content:"\f478"}.bi-list::before{content:"\f479"}.bi-lock-fill::before{content:"\f47a"}.bi-lock::before{content:"\f47b"}.bi-mailbox::before{content:"\f47c"}.bi-mailbox2::before{content:"\f47d"}.bi-map-fill::before{content:"\f47e"}.bi-map::before{content:"\f47f"}.bi-markdown-fill::before{content:"\f480"}.bi-markdown::before{content:"\f481"}.bi-mask::before{content:"\f482"}.bi-megaphone-fill::before{content:"\f483"}.bi-megaphone::before{content:"\f484"}.bi-menu-app-fill::before{content:"\f485"}.bi-menu-app::before{content:"\f486"}.bi-menu-button-fill::before{content:"\f487"}.bi-menu-button-wide-fill::before{content:"\f488"}.bi-menu-button-wide::before{content:"\f489"}.bi-menu-button::before{content:"\f48a"}.bi-menu-down::before{content:"\f48b"}.bi-menu-up::before{content:"\f48c"}.bi-mic-fill::before{content:"\f48d"}.bi-mic-mute-fill::before{content:"\f48e"}.bi-mic-mute::before{content:"\f48f"}.bi-mic::before{content:"\f490"}.bi-minecart-loaded::before{content:"\f491"}.bi-minecart::before{content:"\f492"}.bi-moisture::before{content:"\f493"}.bi-moon-fill::before{content:"\f494"}.bi-moon-stars-fill::before{content:"\f495"}.bi-moon-stars::before{content:"\f496"}.bi-moon::before{content:"\f497"}.bi-mouse-fill::before{content:"\f498"}.bi-mouse::before{content:"\f499"}.bi-mouse2-fill::before{content:"\f49a"}.bi-mouse2::before{content:"\f49b"}.bi-mouse3-fill::before{content:"\f49c"}.bi-mouse3::before{content:"\f49d"}.bi-music-note-beamed::before{content:"\f49e"}.bi-music-note-list::before{content:"\f49f"}.bi-music-note::before{content:"\f4a0"}.bi-music-player-fill::before{content:"\f4a1"}.bi-music-player::before{content:"\f4a2"}.bi-newspaper::before{content:"\f4a3"}.bi-node-minus-fill::before{content:"\f4a4"}.bi-node-minus::before{content:"\f4a5"}.bi-node-plus-fill::before{content:"\f4a6"}.bi-node-plus::before{content:"\f4a7"}.bi-nut-fill::before{content:"\f4a8"}.bi-nut::before{content:"\f4a9"}.bi-octagon-fill::before{content:"\f4aa"}.bi-octagon-half::before{content:"\f4ab"}.bi-octagon::before{content:"\f4ac"}.bi-option::before{content:"\f4ad"}.bi-outlet::before{content:"\f4ae"}.bi-paint-bucket::before{content:"\f4af"}.bi-palette-fill::before{content:"\f4b0"}.bi-palette::before{content:"\f4b1"}.bi-palette2::before{content:"\f4b2"}.bi-paperclip::before{content:"\f4b3"}.bi-paragraph::before{content:"\f4b4"}.bi-patch-check-fill::before{content:"\f4b5"}.bi-patch-check::before{content:"\f4b6"}.bi-patch-exclamation-fill::before{content:"\f4b7"}.bi-patch-exclamation::before{content:"\f4b8"}.bi-patch-minus-fill::before{content:"\f4b9"}.bi-patch-minus::before{content:"\f4ba"}.bi-patch-plus-fill::before{content:"\f4bb"}.bi-patch-plus::before{content:"\f4bc"}.bi-patch-question-fill::before{content:"\f4bd"}.bi-patch-question::before{content:"\f4be"}.bi-pause-btn-fill::before{content:"\f4bf"}.bi-pause-btn::before{content:"\f4c0"}.bi-pause-circle-fill::before{content:"\f4c1"}.bi-pause-circle::before{content:"\f4c2"}.bi-pause-fill::before{content:"\f4c3"}.bi-pause::before{content:"\f4c4"}.bi-peace-fill::before{content:"\f4c5"}.bi-peace::before{content:"\f4c6"}.bi-pen-fill::before{content:"\f4c7"}.bi-pen::before{content:"\f4c8"}.bi-pencil-fill::before{content:"\f4c9"}.bi-pencil-square::before{content:"\f4ca"}.bi-pencil::before{content:"\f4cb"}.bi-pentagon-fill::before{content:"\f4cc"}.bi-pentagon-half::before{content:"\f4cd"}.bi-pentagon::before{content:"\f4ce"}.bi-people-fill::before{content:"\f4cf"}.bi-people::before{content:"\f4d0"}.bi-percent::before{content:"\f4d1"}.bi-person-badge-fill::before{content:"\f4d2"}.bi-person-badge::before{content:"\f4d3"}.bi-person-bounding-box::before{content:"\f4d4"}.bi-person-check-fill::before{content:"\f4d5"}.bi-person-check::before{content:"\f4d6"}.bi-person-circle::before{content:"\f4d7"}.bi-person-dash-fill::before{content:"\f4d8"}.bi-person-dash::before{content:"\f4d9"}.bi-person-fill::before{content:"\f4da"}.bi-person-lines-fill::before{content:"\f4db"}.bi-person-plus-fill::before{content:"\f4dc"}.bi-person-plus::before{content:"\f4dd"}.bi-person-square::before{content:"\f4de"}.bi-person-x-fill::before{content:"\f4df"}.bi-person-x::before{content:"\f4e0"}.bi-person::before{content:"\f4e1"}.bi-phone-fill::before{content:"\f4e2"}.bi-phone-landscape-fill::before{content:"\f4e3"}.bi-phone-landscape::before{content:"\f4e4"}.bi-phone-vibrate-fill::before{content:"\f4e5"}.bi-phone-vibrate::before{content:"\f4e6"}.bi-phone::before{content:"\f4e7"}.bi-pie-chart-fill::before{content:"\f4e8"}.bi-pie-chart::before{content:"\f4e9"}.bi-pin-angle-fill::before{content:"\f4ea"}.bi-pin-angle::before{content:"\f4eb"}.bi-pin-fill::before{content:"\f4ec"}.bi-pin::before{content:"\f4ed"}.bi-pip-fill::before{content:"\f4ee"}.bi-pip::before{content:"\f4ef"}.bi-play-btn-fill::before{content:"\f4f0"}.bi-play-btn::before{content:"\f4f1"}.bi-play-circle-fill::before{content:"\f4f2"}.bi-play-circle::before{content:"\f4f3"}.bi-play-fill::before{content:"\f4f4"}.bi-play::before{content:"\f4f5"}.bi-plug-fill::before{content:"\f4f6"}.bi-plug::before{content:"\f4f7"}.bi-plus-circle-dotted::before{content:"\f4f8"}.bi-plus-circle-fill::before{content:"\f4f9"}.bi-plus-circle::before{content:"\f4fa"}.bi-plus-square-dotted::before{content:"\f4fb"}.bi-plus-square-fill::before{content:"\f4fc"}.bi-plus-square::before{content:"\f4fd"}.bi-plus::before{content:"\f4fe"}.bi-power::before{content:"\f4ff"}.bi-printer-fill::before{content:"\f500"}.bi-printer::before{content:"\f501"}.bi-puzzle-fill::before{content:"\f502"}.bi-puzzle::before{content:"\f503"}.bi-question-circle-fill::before{content:"\f504"}.bi-question-circle::before{content:"\f505"}.bi-question-diamond-fill::before{content:"\f506"}.bi-question-diamond::before{content:"\f507"}.bi-question-octagon-fill::before{content:"\f508"}.bi-question-octagon::before{content:"\f509"}.bi-question-square-fill::before{content:"\f50a"}.bi-question-square::before{content:"\f50b"}.bi-question::before{content:"\f50c"}.bi-rainbow::before{content:"\f50d"}.bi-receipt-cutoff::before{content:"\f50e"}.bi-receipt::before{content:"\f50f"}.bi-reception-0::before{content:"\f510"}.bi-reception-1::before{content:"\f511"}.bi-reception-2::before{content:"\f512"}.bi-reception-3::before{content:"\f513"}.bi-reception-4::before{content:"\f514"}.bi-record-btn-fill::before{content:"\f515"}.bi-record-btn::before{content:"\f516"}.bi-record-circle-fill::before{content:"\f517"}.bi-record-circle::before{content:"\f518"}.bi-record-fill::before{content:"\f519"}.bi-record::before{content:"\f51a"}.bi-record2-fill::before{content:"\f51b"}.bi-record2::before{content:"\f51c"}.bi-reply-all-fill::before{content:"\f51d"}.bi-reply-all::before{content:"\f51e"}.bi-reply-fill::before{content:"\f51f"}.bi-reply::before{content:"\f520"}.bi-rss-fill::before{content:"\f521"}.bi-rss::before{content:"\f522"}.bi-rulers::before{content:"\f523"}.bi-save-fill::before{content:"\f524"}.bi-save::before{content:"\f525"}.bi-save2-fill::before{content:"\f526"}.bi-save2::before{content:"\f527"}.bi-scissors::before{content:"\f528"}.bi-screwdriver::before{content:"\f529"}.bi-search::before{content:"\f52a"}.bi-segmented-nav::before{content:"\f52b"}.bi-server::before{content:"\f52c"}.bi-share-fill::before{content:"\f52d"}.bi-share::before{content:"\f52e"}.bi-shield-check::before{content:"\f52f"}.bi-shield-exclamation::before{content:"\f530"}.bi-shield-fill-check::before{content:"\f531"}.bi-shield-fill-exclamation::before{content:"\f532"}.bi-shield-fill-minus::before{content:"\f533"}.bi-shield-fill-plus::before{content:"\f534"}.bi-shield-fill-x::before{content:"\f535"}.bi-shield-fill::before{content:"\f536"}.bi-shield-lock-fill::before{content:"\f537"}.bi-shield-lock::before{content:"\f538"}.bi-shield-minus::before{content:"\f539"}.bi-shield-plus::before{content:"\f53a"}.bi-shield-shaded::before{content:"\f53b"}.bi-shield-slash-fill::before{content:"\f53c"}.bi-shield-slash::before{content:"\f53d"}.bi-shield-x::before{content:"\f53e"}.bi-shield::before{content:"\f53f"}.bi-shift-fill::before{content:"\f540"}.bi-shift::before{content:"\f541"}.bi-shop-window::before{content:"\f542"}.bi-shop::before{content:"\f543"}.bi-shuffle::before{content:"\f544"}.bi-signpost-2-fill::before{content:"\f545"}.bi-signpost-2::before{content:"\f546"}.bi-signpost-fill::before{content:"\f547"}.bi-signpost-split-fill::before{content:"\f548"}.bi-signpost-split::before{content:"\f549"}.bi-signpost::before{content:"\f54a"}.bi-sim-fill::before{content:"\f54b"}.bi-sim::before{content:"\f54c"}.bi-skip-backward-btn-fill::before{content:"\f54d"}.bi-skip-backward-btn::before{content:"\f54e"}.bi-skip-backward-circle-fill::before{content:"\f54f"}.bi-skip-backward-circle::before{content:"\f550"}.bi-skip-backward-fill::before{content:"\f551"}.bi-skip-backward::before{content:"\f552"}.bi-skip-end-btn-fill::before{content:"\f553"}.bi-skip-end-btn::before{content:"\f554"}.bi-skip-end-circle-fill::before{content:"\f555"}.bi-skip-end-circle::before{content:"\f556"}.bi-skip-end-fill::before{content:"\f557"}.bi-skip-end::before{content:"\f558"}.bi-skip-forward-btn-fill::before{content:"\f559"}.bi-skip-forward-btn::before{content:"\f55a"}.bi-skip-forward-circle-fill::before{content:"\f55b"}.bi-skip-forward-circle::before{content:"\f55c"}.bi-skip-forward-fill::before{content:"\f55d"}.bi-skip-forward::before{content:"\f55e"}.bi-skip-start-btn-fill::before{content:"\f55f"}.bi-skip-start-btn::before{content:"\f560"}.bi-skip-start-circle-fill::before{content:"\f561"}.bi-skip-start-circle::before{content:"\f562"}.bi-skip-start-fill::before{content:"\f563"}.bi-skip-start::before{content:"\f564"}.bi-slack::before{content:"\f565"}.bi-slash-circle-fill::before{content:"\f566"}.bi-slash-circle::before{content:"\f567"}.bi-slash-square-fill::before{content:"\f568"}.bi-slash-square::before{content:"\f569"}.bi-slash::before{content:"\f56a"}.bi-sliders::before{content:"\f56b"}.bi-smartwatch::before{content:"\f56c"}.bi-snow::before{content:"\f56d"}.bi-snow2::before{content:"\f56e"}.bi-snow3::before{content:"\f56f"}.bi-sort-alpha-down-alt::before{content:"\f570"}.bi-sort-alpha-down::before{content:"\f571"}.bi-sort-alpha-up-alt::before{content:"\f572"}.bi-sort-alpha-up::before{content:"\f573"}.bi-sort-down-alt::before{content:"\f574"}.bi-sort-down::before{content:"\f575"}.bi-sort-numeric-down-alt::before{content:"\f576"}.bi-sort-numeric-down::before{content:"\f577"}.bi-sort-numeric-up-alt::before{content:"\f578"}.bi-sort-numeric-up::before{content:"\f579"}.bi-sort-up-alt::before{content:"\f57a"}.bi-sort-up::before{content:"\f57b"}.bi-soundwave::before{content:"\f57c"}.bi-speaker-fill::before{content:"\f57d"}.bi-speaker::before{content:"\f57e"}.bi-speedometer::before{content:"\f57f"}.bi-speedometer2::before{content:"\f580"}.bi-spellcheck::before{content:"\f581"}.bi-square-fill::before{content:"\f582"}.bi-square-half::before{content:"\f583"}.bi-square::before{content:"\f584"}.bi-stack::before{content:"\f585"}.bi-star-fill::before{content:"\f586"}.bi-star-half::before{content:"\f587"}.bi-star::before{content:"\f588"}.bi-stars::before{content:"\f589"}.bi-stickies-fill::before{content:"\f58a"}.bi-stickies::before{content:"\f58b"}.bi-sticky-fill::before{content:"\f58c"}.bi-sticky::before{content:"\f58d"}.bi-stop-btn-fill::before{content:"\f58e"}.bi-stop-btn::before{content:"\f58f"}.bi-stop-circle-fill::before{content:"\f590"}.bi-stop-circle::before{content:"\f591"}.bi-stop-fill::before{content:"\f592"}.bi-stop::before{content:"\f593"}.bi-stoplights-fill::before{content:"\f594"}.bi-stoplights::before{content:"\f595"}.bi-stopwatch-fill::before{content:"\f596"}.bi-stopwatch::before{content:"\f597"}.bi-subtract::before{content:"\f598"}.bi-suit-club-fill::before{content:"\f599"}.bi-suit-club::before{content:"\f59a"}.bi-suit-diamond-fill::before{content:"\f59b"}.bi-suit-diamond::before{content:"\f59c"}.bi-suit-heart-fill::before{content:"\f59d"}.bi-suit-heart::before{content:"\f59e"}.bi-suit-spade-fill::before{content:"\f59f"}.bi-suit-spade::before{content:"\f5a0"}.bi-sun-fill::before{content:"\f5a1"}.bi-sun::before{content:"\f5a2"}.bi-sunglasses::before{content:"\f5a3"}.bi-sunrise-fill::before{content:"\f5a4"}.bi-sunrise::before{content:"\f5a5"}.bi-sunset-fill::before{content:"\f5a6"}.bi-sunset::before{content:"\f5a7"}.bi-symmetry-horizontal::before{content:"\f5a8"}.bi-symmetry-vertical::before{content:"\f5a9"}.bi-table::before{content:"\f5aa"}.bi-tablet-fill::before{content:"\f5ab"}.bi-tablet-landscape-fill::before{content:"\f5ac"}.bi-tablet-landscape::before{content:"\f5ad"}.bi-tablet::before{content:"\f5ae"}.bi-tag-fill::before{content:"\f5af"}.bi-tag::before{content:"\f5b0"}.bi-tags-fill::before{content:"\f5b1"}.bi-tags::before{content:"\f5b2"}.bi-telegram::before{content:"\f5b3"}.bi-telephone-fill::before{content:"\f5b4"}.bi-telephone-forward-fill::before{content:"\f5b5"}.bi-telephone-forward::before{content:"\f5b6"}.bi-telephone-inbound-fill::before{content:"\f5b7"}.bi-telephone-inbound::before{content:"\f5b8"}.bi-telephone-minus-fill::before{content:"\f5b9"}.bi-telephone-minus::before{content:"\f5ba"}.bi-telephone-outbound-fill::before{content:"\f5bb"}.bi-telephone-outbound::before{content:"\f5bc"}.bi-telephone-plus-fill::before{content:"\f5bd"}.bi-telephone-plus::before{content:"\f5be"}.bi-telephone-x-fill::before{content:"\f5bf"}.bi-telephone-x::before{content:"\f5c0"}.bi-telephone::before{content:"\f5c1"}.bi-terminal-fill::before{content:"\f5c2"}.bi-terminal::before{content:"\f5c3"}.bi-text-center::before{content:"\f5c4"}.bi-text-indent-left::before{content:"\f5c5"}.bi-text-indent-right::before{content:"\f5c6"}.bi-text-left::before{content:"\f5c7"}.bi-text-paragraph::before{content:"\f5c8"}.bi-text-right::before{content:"\f5c9"}.bi-textarea-resize::before{content:"\f5ca"}.bi-textarea-t::before{content:"\f5cb"}.bi-textarea::before{content:"\f5cc"}.bi-thermometer-half::before{content:"\f5cd"}.bi-thermometer-high::before{content:"\f5ce"}.bi-thermometer-low::before{content:"\f5cf"}.bi-thermometer-snow::before{content:"\f5d0"}.bi-thermometer-sun::before{content:"\f5d1"}.bi-thermometer::before{content:"\f5d2"}.bi-three-dots-vertical::before{content:"\f5d3"}.bi-three-dots::before{content:"\f5d4"}.bi-toggle-off::before{content:"\f5d5"}.bi-toggle-on::before{content:"\f5d6"}.bi-toggle2-off::before{content:"\f5d7"}.bi-toggle2-on::before{content:"\f5d8"}.bi-toggles::before{content:"\f5d9"}.bi-toggles2::before{content:"\f5da"}.bi-tools::before{content:"\f5db"}.bi-tornado::before{content:"\f5dc"}.bi-trash-fill::before{content:"\f5dd"}.bi-trash::before{content:"\f5de"}.bi-trash2-fill::before{content:"\f5df"}.bi-trash2::before{content:"\f5e0"}.bi-tree-fill::before{content:"\f5e1"}.bi-tree::before{content:"\f5e2"}.bi-triangle-fill::before{content:"\f5e3"}.bi-triangle-half::before{content:"\f5e4"}.bi-triangle::before{content:"\f5e5"}.bi-trophy-fill::before{content:"\f5e6"}.bi-trophy::before{content:"\f5e7"}.bi-tropical-storm::before{content:"\f5e8"}.bi-truck-flatbed::before{content:"\f5e9"}.bi-truck::before{content:"\f5ea"}.bi-tsunami::before{content:"\f5eb"}.bi-tv-fill::before{content:"\f5ec"}.bi-tv::before{content:"\f5ed"}.bi-twitch::before{content:"\f5ee"}.bi-twitter::before{content:"\f5ef"}.bi-type-bold::before{content:"\f5f0"}.bi-type-h1::before{content:"\f5f1"}.bi-type-h2::before{content:"\f5f2"}.bi-type-h3::before{content:"\f5f3"}.bi-type-italic::before{content:"\f5f4"}.bi-type-strikethrough::before{content:"\f5f5"}.bi-type-underline::before{content:"\f5f6"}.bi-type::before{content:"\f5f7"}.bi-ui-checks-grid::before{content:"\f5f8"}.bi-ui-checks::before{content:"\f5f9"}.bi-ui-radios-grid::before{content:"\f5fa"}.bi-ui-radios::before{content:"\f5fb"}.bi-umbrella-fill::before{content:"\f5fc"}.bi-umbrella::before{content:"\f5fd"}.bi-union::before{content:"\f5fe"}.bi-unlock-fill::before{content:"\f5ff"}.bi-unlock::before{content:"\f600"}.bi-upc-scan::before{content:"\f601"}.bi-upc::before{content:"\f602"}.bi-upload::before{content:"\f603"}.bi-vector-pen::before{content:"\f604"}.bi-view-list::before{content:"\f605"}.bi-view-stacked::before{content:"\f606"}.bi-vinyl-fill::before{content:"\f607"}.bi-vinyl::before{content:"\f608"}.bi-voicemail::before{content:"\f609"}.bi-volume-down-fill::before{content:"\f60a"}.bi-volume-down::before{content:"\f60b"}.bi-volume-mute-fill::before{content:"\f60c"}.bi-volume-mute::before{content:"\f60d"}.bi-volume-off-fill::before{content:"\f60e"}.bi-volume-off::before{content:"\f60f"}.bi-volume-up-fill::before{content:"\f610"}.bi-volume-up::before{content:"\f611"}.bi-vr::before{content:"\f612"}.bi-wallet-fill::before{content:"\f613"}.bi-wallet::before{content:"\f614"}.bi-wallet2::before{content:"\f615"}.bi-watch::before{content:"\f616"}.bi-water::before{content:"\f617"}.bi-whatsapp::before{content:"\f618"}.bi-wifi-1::before{content:"\f619"}.bi-wifi-2::before{content:"\f61a"}.bi-wifi-off::before{content:"\f61b"}.bi-wifi::before{content:"\f61c"}.bi-wind::before{content:"\f61d"}.bi-window-dock::before{content:"\f61e"}.bi-window-sidebar::before{content:"\f61f"}.bi-window::before{content:"\f620"}.bi-wrench::before{content:"\f621"}.bi-x-circle-fill::before{content:"\f622"}.bi-x-circle::before{content:"\f623"}.bi-x-diamond-fill::before{content:"\f624"}.bi-x-diamond::before{content:"\f625"}.bi-x-octagon-fill::before{content:"\f626"}.bi-x-octagon::before{content:"\f627"}.bi-x-square-fill::before{content:"\f628"}.bi-x-square::before{content:"\f629"}.bi-x::before{content:"\f62a"}.bi-youtube::before{content:"\f62b"}.bi-zoom-in::before{content:"\f62c"}.bi-zoom-out::before{content:"\f62d"}.bi-bank::before{content:"\f62e"}.bi-bank2::before{content:"\f62f"}.bi-bell-slash-fill::before{content:"\f630"}.bi-bell-slash::before{content:"\f631"}.bi-cash-coin::before{content:"\f632"}.bi-check-lg::before{content:"\f633"}.bi-coin::before{content:"\f634"}.bi-currency-bitcoin::before{content:"\f635"}.bi-currency-dollar::before{content:"\f636"}.bi-currency-euro::before{content:"\f637"}.bi-currency-exchange::before{content:"\f638"}.bi-currency-pound::before{content:"\f639"}.bi-currency-yen::before{content:"\f63a"}.bi-dash-lg::before{content:"\f63b"}.bi-exclamation-lg::before{content:"\f63c"}.bi-file-earmark-pdf-fill::before{content:"\f63d"}.bi-file-earmark-pdf::before{content:"\f63e"}.bi-file-pdf-fill::before{content:"\f63f"}.bi-file-pdf::before{content:"\f640"}.bi-gender-ambiguous::before{content:"\f641"}.bi-gender-female::before{content:"\f642"}.bi-gender-male::before{content:"\f643"}.bi-gender-trans::before{content:"\f644"}.bi-headset-vr::before{content:"\f645"}.bi-info-lg::before{content:"\f646"}.bi-mastodon::before{content:"\f647"}.bi-messenger::before{content:"\f648"}.bi-piggy-bank-fill::before{content:"\f649"}.bi-piggy-bank::before{content:"\f64a"}.bi-pin-map-fill::before{content:"\f64b"}.bi-pin-map::before{content:"\f64c"}.bi-plus-lg::before{content:"\f64d"}.bi-question-lg::before{content:"\f64e"}.bi-recycle::before{content:"\f64f"}.bi-reddit::before{content:"\f650"}.bi-safe-fill::before{content:"\f651"}.bi-safe2-fill::before{content:"\f652"}.bi-safe2::before{content:"\f653"}.bi-sd-card-fill::before{content:"\f654"}.bi-sd-card::before{content:"\f655"}.bi-skype::before{content:"\f656"}.bi-slash-lg::before{content:"\f657"}.bi-translate::before{content:"\f658"}.bi-x-lg::before{content:"\f659"}.bi-safe::before{content:"\f65a"}.bi-apple::before{content:"\f65b"}.bi-microsoft::before{content:"\f65d"}.bi-windows::before{content:"\f65e"}.bi-behance::before{content:"\f65c"}.bi-dribbble::before{content:"\f65f"}.bi-line::before{content:"\f660"}.bi-medium::before{content:"\f661"}.bi-paypal::before{content:"\f662"}.bi-pinterest::before{content:"\f663"}.bi-signal::before{content:"\f664"}.bi-snapchat::before{content:"\f665"}.bi-spotify::before{content:"\f666"}.bi-stack-overflow::before{content:"\f667"}.bi-strava::before{content:"\f668"}.bi-wordpress::before{content:"\f669"}.bi-vimeo::before{content:"\f66a"}.bi-activity::before{content:"\f66b"}.bi-easel2-fill::before{content:"\f66c"}.bi-easel2::before{content:"\f66d"}.bi-easel3-fill::before{content:"\f66e"}.bi-easel3::before{content:"\f66f"}.bi-fan::before{content:"\f670"}.bi-fingerprint::before{content:"\f671"}.bi-graph-down-arrow::before{content:"\f672"}.bi-graph-up-arrow::before{content:"\f673"}.bi-hypnotize::before{content:"\f674"}.bi-magic::before{content:"\f675"}.bi-person-rolodex::before{content:"\f676"}.bi-person-video::before{content:"\f677"}.bi-person-video2::before{content:"\f678"}.bi-person-video3::before{content:"\f679"}.bi-person-workspace::before{content:"\f67a"}.bi-radioactive::before{content:"\f67b"}.bi-webcam-fill::before{content:"\f67c"}.bi-webcam::before{content:"\f67d"}.bi-yin-yang::before{content:"\f67e"}.bi-bandaid-fill::before{content:"\f680"}.bi-bandaid::before{content:"\f681"}.bi-bluetooth::before{content:"\f682"}.bi-body-text::before{content:"\f683"}.bi-boombox::before{content:"\f684"}.bi-boxes::before{content:"\f685"}.bi-dpad-fill::before{content:"\f686"}.bi-dpad::before{content:"\f687"}.bi-ear-fill::before{content:"\f688"}.bi-ear::before{content:"\f689"}.bi-envelope-check-fill::before{content:"\f68b"}.bi-envelope-check::before{content:"\f68c"}.bi-envelope-dash-fill::before{content:"\f68e"}.bi-envelope-dash::before{content:"\f68f"}.bi-envelope-exclamation-fill::before{content:"\f691"}.bi-envelope-exclamation::before{content:"\f692"}.bi-envelope-plus-fill::before{content:"\f693"}.bi-envelope-plus::before{content:"\f694"}.bi-envelope-slash-fill::before{content:"\f696"}.bi-envelope-slash::before{content:"\f697"}.bi-envelope-x-fill::before{content:"\f699"}.bi-envelope-x::before{content:"\f69a"}.bi-explicit-fill::before{content:"\f69b"}.bi-explicit::before{content:"\f69c"}.bi-git::before{content:"\f69d"}.bi-infinity::before{content:"\f69e"}.bi-list-columns-reverse::before{content:"\f69f"}.bi-list-columns::before{content:"\f6a0"}.bi-meta::before{content:"\f6a1"}.bi-nintendo-switch::before{content:"\f6a4"}.bi-pc-display-horizontal::before{content:"\f6a5"}.bi-pc-display::before{content:"\f6a6"}.bi-pc-horizontal::before{content:"\f6a7"}.bi-pc::before{content:"\f6a8"}.bi-playstation::before{content:"\f6a9"}.bi-plus-slash-minus::before{content:"\f6aa"}.bi-projector-fill::before{content:"\f6ab"}.bi-projector::before{content:"\f6ac"}.bi-qr-code-scan::before{content:"\f6ad"}.bi-qr-code::before{content:"\f6ae"}.bi-quora::before{content:"\f6af"}.bi-quote::before{content:"\f6b0"}.bi-robot::before{content:"\f6b1"}.bi-send-check-fill::before{content:"\f6b2"}.bi-send-check::before{content:"\f6b3"}.bi-send-dash-fill::before{content:"\f6b4"}.bi-send-dash::before{content:"\f6b5"}.bi-send-exclamation-fill::before{content:"\f6b7"}.bi-send-exclamation::before{content:"\f6b8"}.bi-send-fill::before{content:"\f6b9"}.bi-send-plus-fill::before{content:"\f6ba"}.bi-send-plus::before{content:"\f6bb"}.bi-send-slash-fill::before{content:"\f6bc"}.bi-send-slash::before{content:"\f6bd"}.bi-send-x-fill::before{content:"\f6be"}.bi-send-x::before{content:"\f6bf"}.bi-send::before{content:"\f6c0"}.bi-steam::before{content:"\f6c1"}.bi-terminal-dash::before{content:"\f6c3"}.bi-terminal-plus::before{content:"\f6c4"}.bi-terminal-split::before{content:"\f6c5"}.bi-ticket-detailed-fill::before{content:"\f6c6"}.bi-ticket-detailed::before{content:"\f6c7"}.bi-ticket-fill::before{content:"\f6c8"}.bi-ticket-perforated-fill::before{content:"\f6c9"}.bi-ticket-perforated::before{content:"\f6ca"}.bi-ticket::before{content:"\f6cb"}.bi-tiktok::before{content:"\f6cc"}.bi-window-dash::before{content:"\f6cd"}.bi-window-desktop::before{content:"\f6ce"}.bi-window-fullscreen::before{content:"\f6cf"}.bi-window-plus::before{content:"\f6d0"}.bi-window-split::before{content:"\f6d1"}.bi-window-stack::before{content:"\f6d2"}.bi-window-x::before{content:"\f6d3"}.bi-xbox::before{content:"\f6d4"}.bi-ethernet::before{content:"\f6d5"}.bi-hdmi-fill::before{content:"\f6d6"}.bi-hdmi::before{content:"\f6d7"}.bi-usb-c-fill::before{content:"\f6d8"}.bi-usb-c::before{content:"\f6d9"}.bi-usb-fill::before{content:"\f6da"}.bi-usb-plug-fill::before{content:"\f6db"}.bi-usb-plug::before{content:"\f6dc"}.bi-usb-symbol::before{content:"\f6dd"}.bi-usb::before{content:"\f6de"}.bi-boombox-fill::before{content:"\f6df"}.bi-displayport::before{content:"\f6e1"}.bi-gpu-card::before{content:"\f6e2"}.bi-memory::before{content:"\f6e3"}.bi-modem-fill::before{content:"\f6e4"}.bi-modem::before{content:"\f6e5"}.bi-motherboard-fill::before{content:"\f6e6"}.bi-motherboard::before{content:"\f6e7"}.bi-optical-audio-fill::before{content:"\f6e8"}.bi-optical-audio::before{content:"\f6e9"}.bi-pci-card::before{content:"\f6ea"}.bi-router-fill::before{content:"\f6eb"}.bi-router::before{content:"\f6ec"}.bi-thunderbolt-fill::before{content:"\f6ef"}.bi-thunderbolt::before{content:"\f6f0"}.bi-usb-drive-fill::before{content:"\f6f1"}.bi-usb-drive::before{content:"\f6f2"}.bi-usb-micro-fill::before{content:"\f6f3"}.bi-usb-micro::before{content:"\f6f4"}.bi-usb-mini-fill::before{content:"\f6f5"}.bi-usb-mini::before{content:"\f6f6"}.bi-cloud-haze2::before{content:"\f6f7"}.bi-device-hdd-fill::before{content:"\f6f8"}.bi-device-hdd::before{content:"\f6f9"}.bi-device-ssd-fill::before{content:"\f6fa"}.bi-device-ssd::before{content:"\f6fb"}.bi-displayport-fill::before{content:"\f6fc"}.bi-mortarboard-fill::before{content:"\f6fd"}.bi-mortarboard::before{content:"\f6fe"}.bi-terminal-x::before{content:"\f6ff"}.bi-arrow-through-heart-fill::before{content:"\f700"}.bi-arrow-through-heart::before{content:"\f701"}.bi-badge-sd-fill::before{content:"\f702"}.bi-badge-sd::before{content:"\f703"}.bi-bag-heart-fill::before{content:"\f704"}.bi-bag-heart::before{content:"\f705"}.bi-balloon-fill::before{content:"\f706"}.bi-balloon-heart-fill::before{content:"\f707"}.bi-balloon-heart::before{content:"\f708"}.bi-balloon::before{content:"\f709"}.bi-box2-fill::before{content:"\f70a"}.bi-box2-heart-fill::before{content:"\f70b"}.bi-box2-heart::before{content:"\f70c"}.bi-box2::before{content:"\f70d"}.bi-braces-asterisk::before{content:"\f70e"}.bi-calendar-heart-fill::before{content:"\f70f"}.bi-calendar-heart::before{content:"\f710"}.bi-calendar2-heart-fill::before{content:"\f711"}.bi-calendar2-heart::before{content:"\f712"}.bi-chat-heart-fill::before{content:"\f713"}.bi-chat-heart::before{content:"\f714"}.bi-chat-left-heart-fill::before{content:"\f715"}.bi-chat-left-heart::before{content:"\f716"}.bi-chat-right-heart-fill::before{content:"\f717"}.bi-chat-right-heart::before{content:"\f718"}.bi-chat-square-heart-fill::before{content:"\f719"}.bi-chat-square-heart::before{content:"\f71a"}.bi-clipboard-check-fill::before{content:"\f71b"}.bi-clipboard-data-fill::before{content:"\f71c"}.bi-clipboard-fill::before{content:"\f71d"}.bi-clipboard-heart-fill::before{content:"\f71e"}.bi-clipboard-heart::before{content:"\f71f"}.bi-clipboard-minus-fill::before{content:"\f720"}.bi-clipboard-plus-fill::before{content:"\f721"}.bi-clipboard-pulse::before{content:"\f722"}.bi-clipboard-x-fill::before{content:"\f723"}.bi-clipboard2-check-fill::before{content:"\f724"}.bi-clipboard2-check::before{content:"\f725"}.bi-clipboard2-data-fill::before{content:"\f726"}.bi-clipboard2-data::before{content:"\f727"}.bi-clipboard2-fill::before{content:"\f728"}.bi-clipboard2-heart-fill::before{content:"\f729"}.bi-clipboard2-heart::before{content:"\f72a"}.bi-clipboard2-minus-fill::before{content:"\f72b"}.bi-clipboard2-minus::before{content:"\f72c"}.bi-clipboard2-plus-fill::before{content:"\f72d"}.bi-clipboard2-plus::before{content:"\f72e"}.bi-clipboard2-pulse-fill::before{content:"\f72f"}.bi-clipboard2-pulse::before{content:"\f730"}.bi-clipboard2-x-fill::before{content:"\f731"}.bi-clipboard2-x::before{content:"\f732"}.bi-clipboard2::before{content:"\f733"}.bi-emoji-kiss-fill::before{content:"\f734"}.bi-emoji-kiss::before{content:"\f735"}.bi-envelope-heart-fill::before{content:"\f736"}.bi-envelope-heart::before{content:"\f737"}.bi-envelope-open-heart-fill::before{content:"\f738"}.bi-envelope-open-heart::before{content:"\f739"}.bi-envelope-paper-fill::before{content:"\f73a"}.bi-envelope-paper-heart-fill::before{content:"\f73b"}.bi-envelope-paper-heart::before{content:"\f73c"}.bi-envelope-paper::before{content:"\f73d"}.bi-filetype-aac::before{content:"\f73e"}.bi-filetype-ai::before{content:"\f73f"}.bi-filetype-bmp::before{content:"\f740"}.bi-filetype-cs::before{content:"\f741"}.bi-filetype-css::before{content:"\f742"}.bi-filetype-csv::before{content:"\f743"}.bi-filetype-doc::before{content:"\f744"}.bi-filetype-docx::before{content:"\f745"}.bi-filetype-exe::before{content:"\f746"}.bi-filetype-gif::before{content:"\f747"}.bi-filetype-heic::before{content:"\f748"}.bi-filetype-html::before{content:"\f749"}.bi-filetype-java::before{content:"\f74a"}.bi-filetype-jpg::before{content:"\f74b"}.bi-filetype-js::before{content:"\f74c"}.bi-filetype-jsx::before{content:"\f74d"}.bi-filetype-key::before{content:"\f74e"}.bi-filetype-m4p::before{content:"\f74f"}.bi-filetype-md::before{content:"\f750"}.bi-filetype-mdx::before{content:"\f751"}.bi-filetype-mov::before{content:"\f752"}.bi-filetype-mp3::before{content:"\f753"}.bi-filetype-mp4::before{content:"\f754"}.bi-filetype-otf::before{content:"\f755"}.bi-filetype-pdf::before{content:"\f756"}.bi-filetype-php::before{content:"\f757"}.bi-filetype-png::before{content:"\f758"}.bi-filetype-ppt::before{content:"\f75a"}.bi-filetype-psd::before{content:"\f75b"}.bi-filetype-py::before{content:"\f75c"}.bi-filetype-raw::before{content:"\f75d"}.bi-filetype-rb::before{content:"\f75e"}.bi-filetype-sass::before{content:"\f75f"}.bi-filetype-scss::before{content:"\f760"}.bi-filetype-sh::before{content:"\f761"}.bi-filetype-svg::before{content:"\f762"}.bi-filetype-tiff::before{content:"\f763"}.bi-filetype-tsx::before{content:"\f764"}.bi-filetype-ttf::before{content:"\f765"}.bi-filetype-txt::before{content:"\f766"}.bi-filetype-wav::before{content:"\f767"}.bi-filetype-woff::before{content:"\f768"}.bi-filetype-xls::before{content:"\f76a"}.bi-filetype-xml::before{content:"\f76b"}.bi-filetype-yml::before{content:"\f76c"}.bi-heart-arrow::before{content:"\f76d"}.bi-heart-pulse-fill::before{content:"\f76e"}.bi-heart-pulse::before{content:"\f76f"}.bi-heartbreak-fill::before{content:"\f770"}.bi-heartbreak::before{content:"\f771"}.bi-hearts::before{content:"\f772"}.bi-hospital-fill::before{content:"\f773"}.bi-hospital::before{content:"\f774"}.bi-house-heart-fill::before{content:"\f775"}.bi-house-heart::before{content:"\f776"}.bi-incognito::before{content:"\f777"}.bi-magnet-fill::before{content:"\f778"}.bi-magnet::before{content:"\f779"}.bi-person-heart::before{content:"\f77a"}.bi-person-hearts::before{content:"\f77b"}.bi-phone-flip::before{content:"\f77c"}.bi-plugin::before{content:"\f77d"}.bi-postage-fill::before{content:"\f77e"}.bi-postage-heart-fill::before{content:"\f77f"}.bi-postage-heart::before{content:"\f780"}.bi-postage::before{content:"\f781"}.bi-postcard-fill::before{content:"\f782"}.bi-postcard-heart-fill::before{content:"\f783"}.bi-postcard-heart::before{content:"\f784"}.bi-postcard::before{content:"\f785"}.bi-search-heart-fill::before{content:"\f786"}.bi-search-heart::before{content:"\f787"}.bi-sliders2-vertical::before{content:"\f788"}.bi-sliders2::before{content:"\f789"}.bi-trash3-fill::before{content:"\f78a"}.bi-trash3::before{content:"\f78b"}.bi-valentine::before{content:"\f78c"}.bi-valentine2::before{content:"\f78d"}.bi-wrench-adjustable-circle-fill::before{content:"\f78e"}.bi-wrench-adjustable-circle::before{content:"\f78f"}.bi-wrench-adjustable::before{content:"\f790"}.bi-filetype-json::before{content:"\f791"}.bi-filetype-pptx::before{content:"\f792"}.bi-filetype-xlsx::before{content:"\f793"}.bi-1-circle-fill::before{content:"\f796"}.bi-1-circle::before{content:"\f797"}.bi-1-square-fill::before{content:"\f798"}.bi-1-square::before{content:"\f799"}.bi-2-circle-fill::before{content:"\f79c"}.bi-2-circle::before{content:"\f79d"}.bi-2-square-fill::before{content:"\f79e"}.bi-2-square::before{content:"\f79f"}.bi-3-circle-fill::before{content:"\f7a2"}.bi-3-circle::before{content:"\f7a3"}.bi-3-square-fill::before{content:"\f7a4"}.bi-3-square::before{content:"\f7a5"}.bi-4-circle-fill::before{content:"\f7a8"}.bi-4-circle::before{content:"\f7a9"}.bi-4-square-fill::before{content:"\f7aa"}.bi-4-square::before{content:"\f7ab"}.bi-5-circle-fill::before{content:"\f7ae"}.bi-5-circle::before{content:"\f7af"}.bi-5-square-fill::before{content:"\f7b0"}.bi-5-square::before{content:"\f7b1"}.bi-6-circle-fill::before{content:"\f7b4"}.bi-6-circle::before{content:"\f7b5"}.bi-6-square-fill::before{content:"\f7b6"}.bi-6-square::before{content:"\f7b7"}.bi-7-circle-fill::before{content:"\f7ba"}.bi-7-circle::before{content:"\f7bb"}.bi-7-square-fill::before{content:"\f7bc"}.bi-7-square::before{content:"\f7bd"}.bi-8-circle-fill::before{content:"\f7c0"}.bi-8-circle::before{content:"\f7c1"}.bi-8-square-fill::before{content:"\f7c2"}.bi-8-square::before{content:"\f7c3"}.bi-9-circle-fill::before{content:"\f7c6"}.bi-9-circle::before{content:"\f7c7"}.bi-9-square-fill::before{content:"\f7c8"}.bi-9-square::before{content:"\f7c9"}.bi-airplane-engines-fill::before{content:"\f7ca"}.bi-airplane-engines::before{content:"\f7cb"}.bi-airplane-fill::before{content:"\f7cc"}.bi-airplane::before{content:"\f7cd"}.bi-alexa::before{content:"\f7ce"}.bi-alipay::before{content:"\f7cf"}.bi-android::before{content:"\f7d0"}.bi-android2::before{content:"\f7d1"}.bi-box-fill::before{content:"\f7d2"}.bi-box-seam-fill::before{content:"\f7d3"}.bi-browser-chrome::before{content:"\f7d4"}.bi-browser-edge::before{content:"\f7d5"}.bi-browser-firefox::before{content:"\f7d6"}.bi-browser-safari::before{content:"\f7d7"}.bi-c-circle-fill::before{content:"\f7da"}.bi-c-circle::before{content:"\f7db"}.bi-c-square-fill::before{content:"\f7dc"}.bi-c-square::before{content:"\f7dd"}.bi-capsule-pill::before{content:"\f7de"}.bi-capsule::before{content:"\f7df"}.bi-car-front-fill::before{content:"\f7e0"}.bi-car-front::before{content:"\f7e1"}.bi-cassette-fill::before{content:"\f7e2"}.bi-cassette::before{content:"\f7e3"}.bi-cc-circle-fill::before{content:"\f7e6"}.bi-cc-circle::before{content:"\f7e7"}.bi-cc-square-fill::before{content:"\f7e8"}.bi-cc-square::before{content:"\f7e9"}.bi-cup-hot-fill::before{content:"\f7ea"}.bi-cup-hot::before{content:"\f7eb"}.bi-currency-rupee::before{content:"\f7ec"}.bi-dropbox::before{content:"\f7ed"}.bi-escape::before{content:"\f7ee"}.bi-fast-forward-btn-fill::before{content:"\f7ef"}.bi-fast-forward-btn::before{content:"\f7f0"}.bi-fast-forward-circle-fill::before{content:"\f7f1"}.bi-fast-forward-circle::before{content:"\f7f2"}.bi-fast-forward-fill::before{content:"\f7f3"}.bi-fast-forward::before{content:"\f7f4"}.bi-filetype-sql::before{content:"\f7f5"}.bi-fire::before{content:"\f7f6"}.bi-google-play::before{content:"\f7f7"}.bi-h-circle-fill::before{content:"\f7fa"}.bi-h-circle::before{content:"\f7fb"}.bi-h-square-fill::before{content:"\f7fc"}.bi-h-square::before{content:"\f7fd"}.bi-indent::before{content:"\f7fe"}.bi-lungs-fill::before{content:"\f7ff"}.bi-lungs::before{content:"\f800"}.bi-microsoft-teams::before{content:"\f801"}.bi-p-circle-fill::before{content:"\f804"}.bi-p-circle::before{content:"\f805"}.bi-p-square-fill::before{content:"\f806"}.bi-p-square::before{content:"\f807"}.bi-pass-fill::before{content:"\f808"}.bi-pass::before{content:"\f809"}.bi-prescription::before{content:"\f80a"}.bi-prescription2::before{content:"\f80b"}.bi-r-circle-fill::before{content:"\f80e"}.bi-r-circle::before{content:"\f80f"}.bi-r-square-fill::before{content:"\f810"}.bi-r-square::before{content:"\f811"}.bi-repeat-1::before{content:"\f812"}.bi-repeat::before{content:"\f813"}.bi-rewind-btn-fill::before{content:"\f814"}.bi-rewind-btn::before{content:"\f815"}.bi-rewind-circle-fill::before{content:"\f816"}.bi-rewind-circle::before{content:"\f817"}.bi-rewind-fill::before{content:"\f818"}.bi-rewind::before{content:"\f819"}.bi-train-freight-front-fill::before{content:"\f81a"}.bi-train-freight-front::before{content:"\f81b"}.bi-train-front-fill::before{content:"\f81c"}.bi-train-front::before{content:"\f81d"}.bi-train-lightrail-front-fill::before{content:"\f81e"}.bi-train-lightrail-front::before{content:"\f81f"}.bi-truck-front-fill::before{content:"\f820"}.bi-truck-front::before{content:"\f821"}.bi-ubuntu::before{content:"\f822"}.bi-unindent::before{content:"\f823"}.bi-unity::before{content:"\f824"}.bi-universal-access-circle::before{content:"\f825"}.bi-universal-access::before{content:"\f826"}.bi-virus::before{content:"\f827"}.bi-virus2::before{content:"\f828"}.bi-wechat::before{content:"\f829"}.bi-yelp::before{content:"\f82a"}.bi-sign-stop-fill::before{content:"\f82b"}.bi-sign-stop-lights-fill::before{content:"\f82c"}.bi-sign-stop-lights::before{content:"\f82d"}.bi-sign-stop::before{content:"\f82e"}.bi-sign-turn-left-fill::before{content:"\f82f"}.bi-sign-turn-left::before{content:"\f830"}.bi-sign-turn-right-fill::before{content:"\f831"}.bi-sign-turn-right::before{content:"\f832"}.bi-sign-turn-slight-left-fill::before{content:"\f833"}.bi-sign-turn-slight-left::before{content:"\f834"}.bi-sign-turn-slight-right-fill::before{content:"\f835"}.bi-sign-turn-slight-right::before{content:"\f836"}.bi-sign-yield-fill::before{content:"\f837"}.bi-sign-yield::before{content:"\f838"}.bi-ev-station-fill::before{content:"\f839"}.bi-ev-station::before{content:"\f83a"}.bi-fuel-pump-diesel-fill::before{content:"\f83b"}.bi-fuel-pump-diesel::before{content:"\f83c"}.bi-fuel-pump-fill::before{content:"\f83d"}.bi-fuel-pump::before{content:"\f83e"}.bi-0-circle-fill::before{content:"\f83f"}.bi-0-circle::before{content:"\f840"}.bi-0-square-fill::before{content:"\f841"}.bi-0-square::before{content:"\f842"}.bi-rocket-fill::before{content:"\f843"}.bi-rocket-takeoff-fill::before{content:"\f844"}.bi-rocket-takeoff::before{content:"\f845"}.bi-rocket::before{content:"\f846"}.bi-stripe::before{content:"\f847"}.bi-subscript::before{content:"\f848"}.bi-superscript::before{content:"\f849"}.bi-trello::before{content:"\f84a"}.bi-envelope-at-fill::before{content:"\f84b"}.bi-envelope-at::before{content:"\f84c"}.bi-regex::before{content:"\f84d"}.bi-text-wrap::before{content:"\f84e"}.bi-sign-dead-end-fill::before{content:"\f84f"}.bi-sign-dead-end::before{content:"\f850"}.bi-sign-do-not-enter-fill::before{content:"\f851"}.bi-sign-do-not-enter::before{content:"\f852"}.bi-sign-intersection-fill::before{content:"\f853"}.bi-sign-intersection-side-fill::before{content:"\f854"}.bi-sign-intersection-side::before{content:"\f855"}.bi-sign-intersection-t-fill::before{content:"\f856"}.bi-sign-intersection-t::before{content:"\f857"}.bi-sign-intersection-y-fill::before{content:"\f858"}.bi-sign-intersection-y::before{content:"\f859"}.bi-sign-intersection::before{content:"\f85a"}.bi-sign-merge-left-fill::before{content:"\f85b"}.bi-sign-merge-left::before{content:"\f85c"}.bi-sign-merge-right-fill::before{content:"\f85d"}.bi-sign-merge-right::before{content:"\f85e"}.bi-sign-no-left-turn-fill::before{content:"\f85f"}.bi-sign-no-left-turn::before{content:"\f860"}.bi-sign-no-parking-fill::before{content:"\f861"}.bi-sign-no-parking::before{content:"\f862"}.bi-sign-no-right-turn-fill::before{content:"\f863"}.bi-sign-no-right-turn::before{content:"\f864"}.bi-sign-railroad-fill::before{content:"\f865"}.bi-sign-railroad::before{content:"\f866"}.bi-building-add::before{content:"\f867"}.bi-building-check::before{content:"\f868"}.bi-building-dash::before{content:"\f869"}.bi-building-down::before{content:"\f86a"}.bi-building-exclamation::before{content:"\f86b"}.bi-building-fill-add::before{content:"\f86c"}.bi-building-fill-check::before{content:"\f86d"}.bi-building-fill-dash::before{content:"\f86e"}.bi-building-fill-down::before{content:"\f86f"}.bi-building-fill-exclamation::before{content:"\f870"}.bi-building-fill-gear::before{content:"\f871"}.bi-building-fill-lock::before{content:"\f872"}.bi-building-fill-slash::before{content:"\f873"}.bi-building-fill-up::before{content:"\f874"}.bi-building-fill-x::before{content:"\f875"}.bi-building-fill::before{content:"\f876"}.bi-building-gear::before{content:"\f877"}.bi-building-lock::before{content:"\f878"}.bi-building-slash::before{content:"\f879"}.bi-building-up::before{content:"\f87a"}.bi-building-x::before{content:"\f87b"}.bi-buildings-fill::before{content:"\f87c"}.bi-buildings::before{content:"\f87d"}.bi-bus-front-fill::before{content:"\f87e"}.bi-bus-front::before{content:"\f87f"}.bi-ev-front-fill::before{content:"\f880"}.bi-ev-front::before{content:"\f881"}.bi-globe-americas::before{content:"\f882"}.bi-globe-asia-australia::before{content:"\f883"}.bi-globe-central-south-asia::before{content:"\f884"}.bi-globe-europe-africa::before{content:"\f885"}.bi-house-add-fill::before{content:"\f886"}.bi-house-add::before{content:"\f887"}.bi-house-check-fill::before{content:"\f888"}.bi-house-check::before{content:"\f889"}.bi-house-dash-fill::before{content:"\f88a"}.bi-house-dash::before{content:"\f88b"}.bi-house-down-fill::before{content:"\f88c"}.bi-house-down::before{content:"\f88d"}.bi-house-exclamation-fill::before{content:"\f88e"}.bi-house-exclamation::before{content:"\f88f"}.bi-house-gear-fill::before{content:"\f890"}.bi-house-gear::before{content:"\f891"}.bi-house-lock-fill::before{content:"\f892"}.bi-house-lock::before{content:"\f893"}.bi-house-slash-fill::before{content:"\f894"}.bi-house-slash::before{content:"\f895"}.bi-house-up-fill::before{content:"\f896"}.bi-house-up::before{content:"\f897"}.bi-house-x-fill::before{content:"\f898"}.bi-house-x::before{content:"\f899"}.bi-person-add::before{content:"\f89a"}.bi-person-down::before{content:"\f89b"}.bi-person-exclamation::before{content:"\f89c"}.bi-person-fill-add::before{content:"\f89d"}.bi-person-fill-check::before{content:"\f89e"}.bi-person-fill-dash::before{content:"\f89f"}.bi-person-fill-down::before{content:"\f8a0"}.bi-person-fill-exclamation::before{content:"\f8a1"}.bi-person-fill-gear::before{content:"\f8a2"}.bi-person-fill-lock::before{content:"\f8a3"}.bi-person-fill-slash::before{content:"\f8a4"}.bi-person-fill-up::before{content:"\f8a5"}.bi-person-fill-x::before{content:"\f8a6"}.bi-person-gear::before{content:"\f8a7"}.bi-person-lock::before{content:"\f8a8"}.bi-person-slash::before{content:"\f8a9"}.bi-person-up::before{content:"\f8aa"}.bi-scooter::before{content:"\f8ab"}.bi-taxi-front-fill::before{content:"\f8ac"}.bi-taxi-front::before{content:"\f8ad"}.bi-amd::before{content:"\f8ae"}.bi-database-add::before{content:"\f8af"}.bi-database-check::before{content:"\f8b0"}.bi-database-dash::before{content:"\f8b1"}.bi-database-down::before{content:"\f8b2"}.bi-database-exclamation::before{content:"\f8b3"}.bi-database-fill-add::before{content:"\f8b4"}.bi-database-fill-check::before{content:"\f8b5"}.bi-database-fill-dash::before{content:"\f8b6"}.bi-database-fill-down::before{content:"\f8b7"}.bi-database-fill-exclamation::before{content:"\f8b8"}.bi-database-fill-gear::before{content:"\f8b9"}.bi-database-fill-lock::before{content:"\f8ba"}.bi-database-fill-slash::before{content:"\f8bb"}.bi-database-fill-up::before{content:"\f8bc"}.bi-database-fill-x::before{content:"\f8bd"}.bi-database-fill::before{content:"\f8be"}.bi-database-gear::before{content:"\f8bf"}.bi-database-lock::before{content:"\f8c0"}.bi-database-slash::before{content:"\f8c1"}.bi-database-up::before{content:"\f8c2"}.bi-database-x::before{content:"\f8c3"}.bi-database::before{content:"\f8c4"}.bi-houses-fill::before{content:"\f8c5"}.bi-houses::before{content:"\f8c6"}.bi-nvidia::before{content:"\f8c7"}.bi-person-vcard-fill::before{content:"\f8c8"}.bi-person-vcard::before{content:"\f8c9"}.bi-sina-weibo::before{content:"\f8ca"}.bi-tencent-qq::before{content:"\f8cb"}.bi-wikipedia::before{content:"\f8cc"}.bi-alphabet-uppercase::before{content:"\f2a5"}.bi-alphabet::before{content:"\f68a"}.bi-amazon::before{content:"\f68d"}.bi-arrows-collapse-vertical::before{content:"\f690"}.bi-arrows-expand-vertical::before{content:"\f695"}.bi-arrows-vertical::before{content:"\f698"}.bi-arrows::before{content:"\f6a2"}.bi-ban-fill::before{content:"\f6a3"}.bi-ban::before{content:"\f6b6"}.bi-bing::before{content:"\f6c2"}.bi-cake::before{content:"\f6e0"}.bi-cake2::before{content:"\f6ed"}.bi-cookie::before{content:"\f6ee"}.bi-copy::before{content:"\f759"}.bi-crosshair::before{content:"\f769"}.bi-crosshair2::before{content:"\f794"}.bi-emoji-astonished-fill::before{content:"\f795"}.bi-emoji-astonished::before{content:"\f79a"}.bi-emoji-grimace-fill::before{content:"\f79b"}.bi-emoji-grimace::before{content:"\f7a0"}.bi-emoji-grin-fill::before{content:"\f7a1"}.bi-emoji-grin::before{content:"\f7a6"}.bi-emoji-surprise-fill::before{content:"\f7a7"}.bi-emoji-surprise::before{content:"\f7ac"}.bi-emoji-tear-fill::before{content:"\f7ad"}.bi-emoji-tear::before{content:"\f7b2"}.bi-envelope-arrow-down-fill::before{content:"\f7b3"}.bi-envelope-arrow-down::before{content:"\f7b8"}.bi-envelope-arrow-up-fill::before{content:"\f7b9"}.bi-envelope-arrow-up::before{content:"\f7be"}.bi-feather::before{content:"\f7bf"}.bi-feather2::before{content:"\f7c4"}.bi-floppy-fill::before{content:"\f7c5"}.bi-floppy::before{content:"\f7d8"}.bi-floppy2-fill::before{content:"\f7d9"}.bi-floppy2::before{content:"\f7e4"}.bi-gitlab::before{content:"\f7e5"}.bi-highlighter::before{content:"\f7f8"}.bi-marker-tip::before{content:"\f802"}.bi-nvme-fill::before{content:"\f803"}.bi-nvme::before{content:"\f80c"}.bi-opencollective::before{content:"\f80d"}.bi-pci-card-network::before{content:"\f8cd"}.bi-pci-card-sound::before{content:"\f8ce"}.bi-radar::before{content:"\f8cf"}.bi-send-arrow-down-fill::before{content:"\f8d0"}.bi-send-arrow-down::before{content:"\f8d1"}.bi-send-arrow-up-fill::before{content:"\f8d2"}.bi-send-arrow-up::before{content:"\f8d3"}.bi-sim-slash-fill::before{content:"\f8d4"}.bi-sim-slash::before{content:"\f8d5"}.bi-sourceforge::before{content:"\f8d6"}.bi-substack::before{content:"\f8d7"}.bi-threads-fill::before{content:"\f8d8"}.bi-threads::before{content:"\f8d9"}.bi-transparency::before{content:"\f8da"}.bi-twitter-x::before{content:"\f8db"}.bi-type-h4::before{content:"\f8dc"}.bi-type-h5::before{content:"\f8dd"}.bi-type-h6::before{content:"\f8de"}.bi-backpack-fill::before{content:"\f8df"}.bi-backpack::before{content:"\f8e0"}.bi-backpack2-fill::before{content:"\f8e1"}.bi-backpack2::before{content:"\f8e2"}.bi-backpack3-fill::before{content:"\f8e3"}.bi-backpack3::before{content:"\f8e4"}.bi-backpack4-fill::before{content:"\f8e5"}.bi-backpack4::before{content:"\f8e6"}.bi-brilliance::before{content:"\f8e7"}.bi-cake-fill::before{content:"\f8e8"}.bi-cake2-fill::before{content:"\f8e9"}.bi-duffle-fill::before{content:"\f8ea"}.bi-duffle::before{content:"\f8eb"}.bi-exposure::before{content:"\f8ec"}.bi-gender-neuter::before{content:"\f8ed"}.bi-highlights::before{content:"\f8ee"}.bi-luggage-fill::before{content:"\f8ef"}.bi-luggage::before{content:"\f8f0"}.bi-mailbox-flag::before{content:"\f8f1"}.bi-mailbox2-flag::before{content:"\f8f2"}.bi-noise-reduction::before{content:"\f8f3"}.bi-passport-fill::before{content:"\f8f4"}.bi-passport::before{content:"\f8f5"}.bi-person-arms-up::before{content:"\f8f6"}.bi-person-raised-hand::before{content:"\f8f7"}.bi-person-standing-dress::before{content:"\f8f8"}.bi-person-standing::before{content:"\f8f9"}.bi-person-walking::before{content:"\f8fa"}.bi-person-wheelchair::before{content:"\f8fb"}.bi-shadows::before{content:"\f8fc"}.bi-suitcase-fill::before{content:"\f8fd"}.bi-suitcase-lg-fill::before{content:"\f8fe"}.bi-suitcase-lg::before{content:"\f8ff"}.bi-suitcase::before{content:"\f900"}.bi-suitcase2-fill::before{content:"\f901"}.bi-suitcase2::before{content:"\f902"}.bi-vignette::before{content:"\f903"} \ No newline at end of file diff --git a/assets/static/bootstrap-icons/font/bootstrap-icons.scss b/assets/static/bootstrap-icons/font/bootstrap-icons.scss new file mode 100644 index 0000000..ea5c018 --- /dev/null +++ b/assets/static/bootstrap-icons/font/bootstrap-icons.scss @@ -0,0 +1,2090 @@ +/*! + * Bootstrap Icons v1.11.3 (https://icons.getbootstrap.com/) + * Copyright 2019-2024 The Bootstrap Authors + * Licensed under MIT (https://github.com/twbs/icons/blob/main/LICENSE) + */ + +$bootstrap-icons-font: "bootstrap-icons" !default; +$bootstrap-icons-font-dir: "./fonts" !default; +$bootstrap-icons-font-file: "#{$bootstrap-icons-font-dir}/#{$bootstrap-icons-font}" !default; +$bootstrap-icons-font-hash: "24e3eb84d0bcaf83d77f904c78ac1f47" !default; +$bootstrap-icons-font-src: url("#{$bootstrap-icons-font-file}.woff2?#{$bootstrap-icons-font-hash}") format("woff2"), + url("#{$bootstrap-icons-font-file}.woff?#{$bootstrap-icons-font-hash}") format("woff") !default; + +@font-face { + font-display: block; + font-family: $bootstrap-icons-font; + src: $bootstrap-icons-font-src; +} + +.bi::before, +[class^="bi-"]::before, +[class*=" bi-"]::before { + display: inline-block; + font-family: $bootstrap-icons-font !important; + font-style: normal; + font-weight: normal !important; + font-variant: normal; + text-transform: none; + line-height: 1; + vertical-align: -.125em; + -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; +} + +$bootstrap-icons-map: ( + "123": "\f67f", + "alarm-fill": "\f101", + "alarm": "\f102", + "align-bottom": "\f103", + "align-center": "\f104", + "align-end": "\f105", + "align-middle": "\f106", + "align-start": "\f107", + "align-top": "\f108", + "alt": "\f109", + "app-indicator": "\f10a", + "app": "\f10b", + "archive-fill": "\f10c", + "archive": "\f10d", + "arrow-90deg-down": "\f10e", + "arrow-90deg-left": "\f10f", + "arrow-90deg-right": "\f110", + "arrow-90deg-up": "\f111", + "arrow-bar-down": "\f112", + "arrow-bar-left": "\f113", + "arrow-bar-right": "\f114", + "arrow-bar-up": "\f115", + "arrow-clockwise": "\f116", + "arrow-counterclockwise": "\f117", + "arrow-down-circle-fill": "\f118", + "arrow-down-circle": "\f119", + "arrow-down-left-circle-fill": "\f11a", + "arrow-down-left-circle": "\f11b", + "arrow-down-left-square-fill": "\f11c", + "arrow-down-left-square": "\f11d", + "arrow-down-left": "\f11e", + "arrow-down-right-circle-fill": "\f11f", + "arrow-down-right-circle": "\f120", + "arrow-down-right-square-fill": "\f121", + "arrow-down-right-square": "\f122", + "arrow-down-right": "\f123", + "arrow-down-short": "\f124", + "arrow-down-square-fill": "\f125", + "arrow-down-square": "\f126", + "arrow-down-up": "\f127", + "arrow-down": "\f128", + "arrow-left-circle-fill": "\f129", + "arrow-left-circle": "\f12a", + "arrow-left-right": "\f12b", + "arrow-left-short": "\f12c", + "arrow-left-square-fill": "\f12d", + "arrow-left-square": "\f12e", + "arrow-left": "\f12f", + "arrow-repeat": "\f130", + "arrow-return-left": "\f131", + "arrow-return-right": "\f132", + "arrow-right-circle-fill": "\f133", + "arrow-right-circle": "\f134", + "arrow-right-short": "\f135", + "arrow-right-square-fill": "\f136", + "arrow-right-square": "\f137", + "arrow-right": "\f138", + "arrow-up-circle-fill": "\f139", + "arrow-up-circle": "\f13a", + "arrow-up-left-circle-fill": "\f13b", + "arrow-up-left-circle": "\f13c", + "arrow-up-left-square-fill": "\f13d", + "arrow-up-left-square": "\f13e", + "arrow-up-left": "\f13f", + "arrow-up-right-circle-fill": "\f140", + "arrow-up-right-circle": "\f141", + "arrow-up-right-square-fill": "\f142", + "arrow-up-right-square": "\f143", + "arrow-up-right": "\f144", + "arrow-up-short": "\f145", + "arrow-up-square-fill": "\f146", + "arrow-up-square": "\f147", + "arrow-up": "\f148", + "arrows-angle-contract": "\f149", + "arrows-angle-expand": "\f14a", + "arrows-collapse": "\f14b", + "arrows-expand": "\f14c", + "arrows-fullscreen": "\f14d", + "arrows-move": "\f14e", + "aspect-ratio-fill": "\f14f", + "aspect-ratio": "\f150", + "asterisk": "\f151", + "at": "\f152", + "award-fill": "\f153", + "award": "\f154", + "back": "\f155", + "backspace-fill": "\f156", + "backspace-reverse-fill": "\f157", + "backspace-reverse": "\f158", + "backspace": "\f159", + "badge-3d-fill": "\f15a", + "badge-3d": "\f15b", + "badge-4k-fill": "\f15c", + "badge-4k": "\f15d", + "badge-8k-fill": "\f15e", + "badge-8k": "\f15f", + "badge-ad-fill": "\f160", + "badge-ad": "\f161", + "badge-ar-fill": "\f162", + "badge-ar": "\f163", + "badge-cc-fill": "\f164", + "badge-cc": "\f165", + "badge-hd-fill": "\f166", + "badge-hd": "\f167", + "badge-tm-fill": "\f168", + "badge-tm": "\f169", + "badge-vo-fill": "\f16a", + "badge-vo": "\f16b", + "badge-vr-fill": "\f16c", + "badge-vr": "\f16d", + "badge-wc-fill": "\f16e", + "badge-wc": "\f16f", + "bag-check-fill": "\f170", + "bag-check": "\f171", + "bag-dash-fill": "\f172", + "bag-dash": "\f173", + "bag-fill": "\f174", + "bag-plus-fill": "\f175", + "bag-plus": "\f176", + "bag-x-fill": "\f177", + "bag-x": "\f178", + "bag": "\f179", + "bar-chart-fill": "\f17a", + "bar-chart-line-fill": "\f17b", + "bar-chart-line": "\f17c", + "bar-chart-steps": "\f17d", + "bar-chart": "\f17e", + "basket-fill": "\f17f", + "basket": "\f180", + "basket2-fill": "\f181", + "basket2": "\f182", + "basket3-fill": "\f183", + "basket3": "\f184", + "battery-charging": "\f185", + "battery-full": "\f186", + "battery-half": "\f187", + "battery": "\f188", + "bell-fill": "\f189", + "bell": "\f18a", + "bezier": "\f18b", + "bezier2": "\f18c", + "bicycle": "\f18d", + "binoculars-fill": "\f18e", + "binoculars": "\f18f", + "blockquote-left": "\f190", + "blockquote-right": "\f191", + "book-fill": "\f192", + "book-half": "\f193", + "book": "\f194", + "bookmark-check-fill": "\f195", + "bookmark-check": "\f196", + "bookmark-dash-fill": "\f197", + "bookmark-dash": "\f198", + "bookmark-fill": "\f199", + "bookmark-heart-fill": "\f19a", + "bookmark-heart": "\f19b", + "bookmark-plus-fill": "\f19c", + "bookmark-plus": "\f19d", + "bookmark-star-fill": "\f19e", + "bookmark-star": "\f19f", + "bookmark-x-fill": "\f1a0", + "bookmark-x": "\f1a1", + "bookmark": "\f1a2", + "bookmarks-fill": "\f1a3", + "bookmarks": "\f1a4", + "bookshelf": "\f1a5", + "bootstrap-fill": "\f1a6", + "bootstrap-reboot": "\f1a7", + "bootstrap": "\f1a8", + "border-all": "\f1a9", + "border-bottom": "\f1aa", + "border-center": "\f1ab", + "border-inner": "\f1ac", + "border-left": "\f1ad", + "border-middle": "\f1ae", + "border-outer": "\f1af", + "border-right": "\f1b0", + "border-style": "\f1b1", + "border-top": "\f1b2", + "border-width": "\f1b3", + "border": "\f1b4", + "bounding-box-circles": "\f1b5", + "bounding-box": "\f1b6", + "box-arrow-down-left": "\f1b7", + "box-arrow-down-right": "\f1b8", + "box-arrow-down": "\f1b9", + "box-arrow-in-down-left": "\f1ba", + "box-arrow-in-down-right": "\f1bb", + "box-arrow-in-down": "\f1bc", + "box-arrow-in-left": "\f1bd", + "box-arrow-in-right": "\f1be", + "box-arrow-in-up-left": "\f1bf", + "box-arrow-in-up-right": "\f1c0", + "box-arrow-in-up": "\f1c1", + "box-arrow-left": "\f1c2", + "box-arrow-right": "\f1c3", + "box-arrow-up-left": "\f1c4", + "box-arrow-up-right": "\f1c5", + "box-arrow-up": "\f1c6", + "box-seam": "\f1c7", + "box": "\f1c8", + "braces": "\f1c9", + "bricks": "\f1ca", + "briefcase-fill": "\f1cb", + "briefcase": "\f1cc", + "brightness-alt-high-fill": "\f1cd", + "brightness-alt-high": "\f1ce", + "brightness-alt-low-fill": "\f1cf", + "brightness-alt-low": "\f1d0", + "brightness-high-fill": "\f1d1", + "brightness-high": "\f1d2", + "brightness-low-fill": "\f1d3", + "brightness-low": "\f1d4", + "broadcast-pin": "\f1d5", + "broadcast": "\f1d6", + "brush-fill": "\f1d7", + "brush": "\f1d8", + "bucket-fill": "\f1d9", + "bucket": "\f1da", + "bug-fill": "\f1db", + "bug": "\f1dc", + "building": "\f1dd", + "bullseye": "\f1de", + "calculator-fill": "\f1df", + "calculator": "\f1e0", + "calendar-check-fill": "\f1e1", + "calendar-check": "\f1e2", + "calendar-date-fill": "\f1e3", + "calendar-date": "\f1e4", + "calendar-day-fill": "\f1e5", + "calendar-day": "\f1e6", + "calendar-event-fill": "\f1e7", + "calendar-event": "\f1e8", + "calendar-fill": "\f1e9", + "calendar-minus-fill": "\f1ea", + "calendar-minus": "\f1eb", + "calendar-month-fill": "\f1ec", + "calendar-month": "\f1ed", + "calendar-plus-fill": "\f1ee", + "calendar-plus": "\f1ef", + "calendar-range-fill": "\f1f0", + "calendar-range": "\f1f1", + "calendar-week-fill": "\f1f2", + "calendar-week": "\f1f3", + "calendar-x-fill": "\f1f4", + "calendar-x": "\f1f5", + "calendar": "\f1f6", + "calendar2-check-fill": "\f1f7", + "calendar2-check": "\f1f8", + "calendar2-date-fill": "\f1f9", + "calendar2-date": "\f1fa", + "calendar2-day-fill": "\f1fb", + "calendar2-day": "\f1fc", + "calendar2-event-fill": "\f1fd", + "calendar2-event": "\f1fe", + "calendar2-fill": "\f1ff", + "calendar2-minus-fill": "\f200", + "calendar2-minus": "\f201", + "calendar2-month-fill": "\f202", + "calendar2-month": "\f203", + "calendar2-plus-fill": "\f204", + "calendar2-plus": "\f205", + "calendar2-range-fill": "\f206", + "calendar2-range": "\f207", + "calendar2-week-fill": "\f208", + "calendar2-week": "\f209", + "calendar2-x-fill": "\f20a", + "calendar2-x": "\f20b", + "calendar2": "\f20c", + "calendar3-event-fill": "\f20d", + "calendar3-event": "\f20e", + "calendar3-fill": "\f20f", + "calendar3-range-fill": "\f210", + "calendar3-range": "\f211", + "calendar3-week-fill": "\f212", + "calendar3-week": "\f213", + "calendar3": "\f214", + "calendar4-event": "\f215", + "calendar4-range": "\f216", + "calendar4-week": "\f217", + "calendar4": "\f218", + "camera-fill": "\f219", + "camera-reels-fill": "\f21a", + "camera-reels": "\f21b", + "camera-video-fill": "\f21c", + "camera-video-off-fill": "\f21d", + "camera-video-off": "\f21e", + "camera-video": "\f21f", + "camera": "\f220", + "camera2": "\f221", + "capslock-fill": "\f222", + "capslock": "\f223", + "card-checklist": "\f224", + "card-heading": "\f225", + "card-image": "\f226", + "card-list": "\f227", + "card-text": "\f228", + "caret-down-fill": "\f229", + "caret-down-square-fill": "\f22a", + "caret-down-square": "\f22b", + "caret-down": "\f22c", + "caret-left-fill": "\f22d", + "caret-left-square-fill": "\f22e", + "caret-left-square": "\f22f", + "caret-left": "\f230", + "caret-right-fill": "\f231", + "caret-right-square-fill": "\f232", + "caret-right-square": "\f233", + "caret-right": "\f234", + "caret-up-fill": "\f235", + "caret-up-square-fill": "\f236", + "caret-up-square": "\f237", + "caret-up": "\f238", + "cart-check-fill": "\f239", + "cart-check": "\f23a", + "cart-dash-fill": "\f23b", + "cart-dash": "\f23c", + "cart-fill": "\f23d", + "cart-plus-fill": "\f23e", + "cart-plus": "\f23f", + "cart-x-fill": "\f240", + "cart-x": "\f241", + "cart": "\f242", + "cart2": "\f243", + "cart3": "\f244", + "cart4": "\f245", + "cash-stack": "\f246", + "cash": "\f247", + "cast": "\f248", + "chat-dots-fill": "\f249", + "chat-dots": "\f24a", + "chat-fill": "\f24b", + "chat-left-dots-fill": "\f24c", + "chat-left-dots": "\f24d", + "chat-left-fill": "\f24e", + "chat-left-quote-fill": "\f24f", + "chat-left-quote": "\f250", + "chat-left-text-fill": "\f251", + "chat-left-text": "\f252", + "chat-left": "\f253", + "chat-quote-fill": "\f254", + "chat-quote": "\f255", + "chat-right-dots-fill": "\f256", + "chat-right-dots": "\f257", + "chat-right-fill": "\f258", + "chat-right-quote-fill": "\f259", + "chat-right-quote": "\f25a", + "chat-right-text-fill": "\f25b", + "chat-right-text": "\f25c", + "chat-right": "\f25d", + "chat-square-dots-fill": "\f25e", + "chat-square-dots": "\f25f", + "chat-square-fill": "\f260", + "chat-square-quote-fill": "\f261", + "chat-square-quote": "\f262", + "chat-square-text-fill": "\f263", + "chat-square-text": "\f264", + "chat-square": "\f265", + "chat-text-fill": "\f266", + "chat-text": "\f267", + "chat": "\f268", + "check-all": "\f269", + "check-circle-fill": "\f26a", + "check-circle": "\f26b", + "check-square-fill": "\f26c", + "check-square": "\f26d", + "check": "\f26e", + "check2-all": "\f26f", + "check2-circle": "\f270", + "check2-square": "\f271", + "check2": "\f272", + "chevron-bar-contract": "\f273", + "chevron-bar-down": "\f274", + "chevron-bar-expand": "\f275", + "chevron-bar-left": "\f276", + "chevron-bar-right": "\f277", + "chevron-bar-up": "\f278", + "chevron-compact-down": "\f279", + "chevron-compact-left": "\f27a", + "chevron-compact-right": "\f27b", + "chevron-compact-up": "\f27c", + "chevron-contract": "\f27d", + "chevron-double-down": "\f27e", + "chevron-double-left": "\f27f", + "chevron-double-right": "\f280", + "chevron-double-up": "\f281", + "chevron-down": "\f282", + "chevron-expand": "\f283", + "chevron-left": "\f284", + "chevron-right": "\f285", + "chevron-up": "\f286", + "circle-fill": "\f287", + "circle-half": "\f288", + "circle-square": "\f289", + "circle": "\f28a", + "clipboard-check": "\f28b", + "clipboard-data": "\f28c", + "clipboard-minus": "\f28d", + "clipboard-plus": "\f28e", + "clipboard-x": "\f28f", + "clipboard": "\f290", + "clock-fill": "\f291", + "clock-history": "\f292", + "clock": "\f293", + "cloud-arrow-down-fill": "\f294", + "cloud-arrow-down": "\f295", + "cloud-arrow-up-fill": "\f296", + "cloud-arrow-up": "\f297", + "cloud-check-fill": "\f298", + "cloud-check": "\f299", + "cloud-download-fill": "\f29a", + "cloud-download": "\f29b", + "cloud-drizzle-fill": "\f29c", + "cloud-drizzle": "\f29d", + "cloud-fill": "\f29e", + "cloud-fog-fill": "\f29f", + "cloud-fog": "\f2a0", + "cloud-fog2-fill": "\f2a1", + "cloud-fog2": "\f2a2", + "cloud-hail-fill": "\f2a3", + "cloud-hail": "\f2a4", + "cloud-haze-fill": "\f2a6", + "cloud-haze": "\f2a7", + "cloud-haze2-fill": "\f2a8", + "cloud-lightning-fill": "\f2a9", + "cloud-lightning-rain-fill": "\f2aa", + "cloud-lightning-rain": "\f2ab", + "cloud-lightning": "\f2ac", + "cloud-minus-fill": "\f2ad", + "cloud-minus": "\f2ae", + "cloud-moon-fill": "\f2af", + "cloud-moon": "\f2b0", + "cloud-plus-fill": "\f2b1", + "cloud-plus": "\f2b2", + "cloud-rain-fill": "\f2b3", + "cloud-rain-heavy-fill": "\f2b4", + "cloud-rain-heavy": "\f2b5", + "cloud-rain": "\f2b6", + "cloud-slash-fill": "\f2b7", + "cloud-slash": "\f2b8", + "cloud-sleet-fill": "\f2b9", + "cloud-sleet": "\f2ba", + "cloud-snow-fill": "\f2bb", + "cloud-snow": "\f2bc", + "cloud-sun-fill": "\f2bd", + "cloud-sun": "\f2be", + "cloud-upload-fill": "\f2bf", + "cloud-upload": "\f2c0", + "cloud": "\f2c1", + "clouds-fill": "\f2c2", + "clouds": "\f2c3", + "cloudy-fill": "\f2c4", + "cloudy": "\f2c5", + "code-slash": "\f2c6", + "code-square": "\f2c7", + "code": "\f2c8", + "collection-fill": "\f2c9", + "collection-play-fill": "\f2ca", + "collection-play": "\f2cb", + "collection": "\f2cc", + "columns-gap": "\f2cd", + "columns": "\f2ce", + "command": "\f2cf", + "compass-fill": "\f2d0", + "compass": "\f2d1", + "cone-striped": "\f2d2", + "cone": "\f2d3", + "controller": "\f2d4", + "cpu-fill": "\f2d5", + "cpu": "\f2d6", + "credit-card-2-back-fill": "\f2d7", + "credit-card-2-back": "\f2d8", + "credit-card-2-front-fill": "\f2d9", + "credit-card-2-front": "\f2da", + "credit-card-fill": "\f2db", + "credit-card": "\f2dc", + "crop": "\f2dd", + "cup-fill": "\f2de", + "cup-straw": "\f2df", + "cup": "\f2e0", + "cursor-fill": "\f2e1", + "cursor-text": "\f2e2", + "cursor": "\f2e3", + "dash-circle-dotted": "\f2e4", + "dash-circle-fill": "\f2e5", + "dash-circle": "\f2e6", + "dash-square-dotted": "\f2e7", + "dash-square-fill": "\f2e8", + "dash-square": "\f2e9", + "dash": "\f2ea", + "diagram-2-fill": "\f2eb", + "diagram-2": "\f2ec", + "diagram-3-fill": "\f2ed", + "diagram-3": "\f2ee", + "diamond-fill": "\f2ef", + "diamond-half": "\f2f0", + "diamond": "\f2f1", + "dice-1-fill": "\f2f2", + "dice-1": "\f2f3", + "dice-2-fill": "\f2f4", + "dice-2": "\f2f5", + "dice-3-fill": "\f2f6", + "dice-3": "\f2f7", + "dice-4-fill": "\f2f8", + "dice-4": "\f2f9", + "dice-5-fill": "\f2fa", + "dice-5": "\f2fb", + "dice-6-fill": "\f2fc", + "dice-6": "\f2fd", + "disc-fill": "\f2fe", + "disc": "\f2ff", + "discord": "\f300", + "display-fill": "\f301", + "display": "\f302", + "distribute-horizontal": "\f303", + "distribute-vertical": "\f304", + "door-closed-fill": "\f305", + "door-closed": "\f306", + "door-open-fill": "\f307", + "door-open": "\f308", + "dot": "\f309", + "download": "\f30a", + "droplet-fill": "\f30b", + "droplet-half": "\f30c", + "droplet": "\f30d", + "earbuds": "\f30e", + "easel-fill": "\f30f", + "easel": "\f310", + "egg-fill": "\f311", + "egg-fried": "\f312", + "egg": "\f313", + "eject-fill": "\f314", + "eject": "\f315", + "emoji-angry-fill": "\f316", + "emoji-angry": "\f317", + "emoji-dizzy-fill": "\f318", + "emoji-dizzy": "\f319", + "emoji-expressionless-fill": "\f31a", + "emoji-expressionless": "\f31b", + "emoji-frown-fill": "\f31c", + "emoji-frown": "\f31d", + "emoji-heart-eyes-fill": "\f31e", + "emoji-heart-eyes": "\f31f", + "emoji-laughing-fill": "\f320", + "emoji-laughing": "\f321", + "emoji-neutral-fill": "\f322", + "emoji-neutral": "\f323", + "emoji-smile-fill": "\f324", + "emoji-smile-upside-down-fill": "\f325", + "emoji-smile-upside-down": "\f326", + "emoji-smile": "\f327", + "emoji-sunglasses-fill": "\f328", + "emoji-sunglasses": "\f329", + "emoji-wink-fill": "\f32a", + "emoji-wink": "\f32b", + "envelope-fill": "\f32c", + "envelope-open-fill": "\f32d", + "envelope-open": "\f32e", + "envelope": "\f32f", + "eraser-fill": "\f330", + "eraser": "\f331", + "exclamation-circle-fill": "\f332", + "exclamation-circle": "\f333", + "exclamation-diamond-fill": "\f334", + "exclamation-diamond": "\f335", + "exclamation-octagon-fill": "\f336", + "exclamation-octagon": "\f337", + "exclamation-square-fill": "\f338", + "exclamation-square": "\f339", + "exclamation-triangle-fill": "\f33a", + "exclamation-triangle": "\f33b", + "exclamation": "\f33c", + "exclude": "\f33d", + "eye-fill": "\f33e", + "eye-slash-fill": "\f33f", + "eye-slash": "\f340", + "eye": "\f341", + "eyedropper": "\f342", + "eyeglasses": "\f343", + "facebook": "\f344", + "file-arrow-down-fill": "\f345", + "file-arrow-down": "\f346", + "file-arrow-up-fill": "\f347", + "file-arrow-up": "\f348", + "file-bar-graph-fill": "\f349", + "file-bar-graph": "\f34a", + "file-binary-fill": "\f34b", + "file-binary": "\f34c", + "file-break-fill": "\f34d", + "file-break": "\f34e", + "file-check-fill": "\f34f", + "file-check": "\f350", + "file-code-fill": "\f351", + "file-code": "\f352", + "file-diff-fill": "\f353", + "file-diff": "\f354", + "file-earmark-arrow-down-fill": "\f355", + "file-earmark-arrow-down": "\f356", + "file-earmark-arrow-up-fill": "\f357", + "file-earmark-arrow-up": "\f358", + "file-earmark-bar-graph-fill": "\f359", + "file-earmark-bar-graph": "\f35a", + "file-earmark-binary-fill": "\f35b", + "file-earmark-binary": "\f35c", + "file-earmark-break-fill": "\f35d", + "file-earmark-break": "\f35e", + "file-earmark-check-fill": "\f35f", + "file-earmark-check": "\f360", + "file-earmark-code-fill": "\f361", + "file-earmark-code": "\f362", + "file-earmark-diff-fill": "\f363", + "file-earmark-diff": "\f364", + "file-earmark-easel-fill": "\f365", + "file-earmark-easel": "\f366", + "file-earmark-excel-fill": "\f367", + "file-earmark-excel": "\f368", + "file-earmark-fill": "\f369", + "file-earmark-font-fill": "\f36a", + "file-earmark-font": "\f36b", + "file-earmark-image-fill": "\f36c", + "file-earmark-image": "\f36d", + "file-earmark-lock-fill": "\f36e", + "file-earmark-lock": "\f36f", + "file-earmark-lock2-fill": "\f370", + "file-earmark-lock2": "\f371", + "file-earmark-medical-fill": "\f372", + "file-earmark-medical": "\f373", + "file-earmark-minus-fill": "\f374", + "file-earmark-minus": "\f375", + "file-earmark-music-fill": "\f376", + "file-earmark-music": "\f377", + "file-earmark-person-fill": "\f378", + "file-earmark-person": "\f379", + "file-earmark-play-fill": "\f37a", + "file-earmark-play": "\f37b", + "file-earmark-plus-fill": "\f37c", + "file-earmark-plus": "\f37d", + "file-earmark-post-fill": "\f37e", + "file-earmark-post": "\f37f", + "file-earmark-ppt-fill": "\f380", + "file-earmark-ppt": "\f381", + "file-earmark-richtext-fill": "\f382", + "file-earmark-richtext": "\f383", + "file-earmark-ruled-fill": "\f384", + "file-earmark-ruled": "\f385", + "file-earmark-slides-fill": "\f386", + "file-earmark-slides": "\f387", + "file-earmark-spreadsheet-fill": "\f388", + "file-earmark-spreadsheet": "\f389", + "file-earmark-text-fill": "\f38a", + "file-earmark-text": "\f38b", + "file-earmark-word-fill": "\f38c", + "file-earmark-word": "\f38d", + "file-earmark-x-fill": "\f38e", + "file-earmark-x": "\f38f", + "file-earmark-zip-fill": "\f390", + "file-earmark-zip": "\f391", + "file-earmark": "\f392", + "file-easel-fill": "\f393", + "file-easel": "\f394", + "file-excel-fill": "\f395", + "file-excel": "\f396", + "file-fill": "\f397", + "file-font-fill": "\f398", + "file-font": "\f399", + "file-image-fill": "\f39a", + "file-image": "\f39b", + "file-lock-fill": "\f39c", + "file-lock": "\f39d", + "file-lock2-fill": "\f39e", + "file-lock2": "\f39f", + "file-medical-fill": "\f3a0", + "file-medical": "\f3a1", + "file-minus-fill": "\f3a2", + "file-minus": "\f3a3", + "file-music-fill": "\f3a4", + "file-music": "\f3a5", + "file-person-fill": "\f3a6", + "file-person": "\f3a7", + "file-play-fill": "\f3a8", + "file-play": "\f3a9", + "file-plus-fill": "\f3aa", + "file-plus": "\f3ab", + "file-post-fill": "\f3ac", + "file-post": "\f3ad", + "file-ppt-fill": "\f3ae", + "file-ppt": "\f3af", + "file-richtext-fill": "\f3b0", + "file-richtext": "\f3b1", + "file-ruled-fill": "\f3b2", + "file-ruled": "\f3b3", + "file-slides-fill": "\f3b4", + "file-slides": "\f3b5", + "file-spreadsheet-fill": "\f3b6", + "file-spreadsheet": "\f3b7", + "file-text-fill": "\f3b8", + "file-text": "\f3b9", + "file-word-fill": "\f3ba", + "file-word": "\f3bb", + "file-x-fill": "\f3bc", + "file-x": "\f3bd", + "file-zip-fill": "\f3be", + "file-zip": "\f3bf", + "file": "\f3c0", + "files-alt": "\f3c1", + "files": "\f3c2", + "film": "\f3c3", + "filter-circle-fill": "\f3c4", + "filter-circle": "\f3c5", + "filter-left": "\f3c6", + "filter-right": "\f3c7", + "filter-square-fill": "\f3c8", + "filter-square": "\f3c9", + "filter": "\f3ca", + "flag-fill": "\f3cb", + "flag": "\f3cc", + "flower1": "\f3cd", + "flower2": "\f3ce", + "flower3": "\f3cf", + "folder-check": "\f3d0", + "folder-fill": "\f3d1", + "folder-minus": "\f3d2", + "folder-plus": "\f3d3", + "folder-symlink-fill": "\f3d4", + "folder-symlink": "\f3d5", + "folder-x": "\f3d6", + "folder": "\f3d7", + "folder2-open": "\f3d8", + "folder2": "\f3d9", + "fonts": "\f3da", + "forward-fill": "\f3db", + "forward": "\f3dc", + "front": "\f3dd", + "fullscreen-exit": "\f3de", + "fullscreen": "\f3df", + "funnel-fill": "\f3e0", + "funnel": "\f3e1", + "gear-fill": "\f3e2", + "gear-wide-connected": "\f3e3", + "gear-wide": "\f3e4", + "gear": "\f3e5", + "gem": "\f3e6", + "geo-alt-fill": "\f3e7", + "geo-alt": "\f3e8", + "geo-fill": "\f3e9", + "geo": "\f3ea", + "gift-fill": "\f3eb", + "gift": "\f3ec", + "github": "\f3ed", + "globe": "\f3ee", + "globe2": "\f3ef", + "google": "\f3f0", + "graph-down": "\f3f1", + "graph-up": "\f3f2", + "grid-1x2-fill": "\f3f3", + "grid-1x2": "\f3f4", + "grid-3x2-gap-fill": "\f3f5", + "grid-3x2-gap": "\f3f6", + "grid-3x2": "\f3f7", + "grid-3x3-gap-fill": "\f3f8", + "grid-3x3-gap": "\f3f9", + "grid-3x3": "\f3fa", + "grid-fill": "\f3fb", + "grid": "\f3fc", + "grip-horizontal": "\f3fd", + "grip-vertical": "\f3fe", + "hammer": "\f3ff", + "hand-index-fill": "\f400", + "hand-index-thumb-fill": "\f401", + "hand-index-thumb": "\f402", + "hand-index": "\f403", + "hand-thumbs-down-fill": "\f404", + "hand-thumbs-down": "\f405", + "hand-thumbs-up-fill": "\f406", + "hand-thumbs-up": "\f407", + "handbag-fill": "\f408", + "handbag": "\f409", + "hash": "\f40a", + "hdd-fill": "\f40b", + "hdd-network-fill": "\f40c", + "hdd-network": "\f40d", + "hdd-rack-fill": "\f40e", + "hdd-rack": "\f40f", + "hdd-stack-fill": "\f410", + "hdd-stack": "\f411", + "hdd": "\f412", + "headphones": "\f413", + "headset": "\f414", + "heart-fill": "\f415", + "heart-half": "\f416", + "heart": "\f417", + "heptagon-fill": "\f418", + "heptagon-half": "\f419", + "heptagon": "\f41a", + "hexagon-fill": "\f41b", + "hexagon-half": "\f41c", + "hexagon": "\f41d", + "hourglass-bottom": "\f41e", + "hourglass-split": "\f41f", + "hourglass-top": "\f420", + "hourglass": "\f421", + "house-door-fill": "\f422", + "house-door": "\f423", + "house-fill": "\f424", + "house": "\f425", + "hr": "\f426", + "hurricane": "\f427", + "image-alt": "\f428", + "image-fill": "\f429", + "image": "\f42a", + "images": "\f42b", + "inbox-fill": "\f42c", + "inbox": "\f42d", + "inboxes-fill": "\f42e", + "inboxes": "\f42f", + "info-circle-fill": "\f430", + "info-circle": "\f431", + "info-square-fill": "\f432", + "info-square": "\f433", + "info": "\f434", + "input-cursor-text": "\f435", + "input-cursor": "\f436", + "instagram": "\f437", + "intersect": "\f438", + "journal-album": "\f439", + "journal-arrow-down": "\f43a", + "journal-arrow-up": "\f43b", + "journal-bookmark-fill": "\f43c", + "journal-bookmark": "\f43d", + "journal-check": "\f43e", + "journal-code": "\f43f", + "journal-medical": "\f440", + "journal-minus": "\f441", + "journal-plus": "\f442", + "journal-richtext": "\f443", + "journal-text": "\f444", + "journal-x": "\f445", + "journal": "\f446", + "journals": "\f447", + "joystick": "\f448", + "justify-left": "\f449", + "justify-right": "\f44a", + "justify": "\f44b", + "kanban-fill": "\f44c", + "kanban": "\f44d", + "key-fill": "\f44e", + "key": "\f44f", + "keyboard-fill": "\f450", + "keyboard": "\f451", + "ladder": "\f452", + "lamp-fill": "\f453", + "lamp": "\f454", + "laptop-fill": "\f455", + "laptop": "\f456", + "layer-backward": "\f457", + "layer-forward": "\f458", + "layers-fill": "\f459", + "layers-half": "\f45a", + "layers": "\f45b", + "layout-sidebar-inset-reverse": "\f45c", + "layout-sidebar-inset": "\f45d", + "layout-sidebar-reverse": "\f45e", + "layout-sidebar": "\f45f", + "layout-split": "\f460", + "layout-text-sidebar-reverse": "\f461", + "layout-text-sidebar": "\f462", + "layout-text-window-reverse": "\f463", + "layout-text-window": "\f464", + "layout-three-columns": "\f465", + "layout-wtf": "\f466", + "life-preserver": "\f467", + "lightbulb-fill": "\f468", + "lightbulb-off-fill": "\f469", + "lightbulb-off": "\f46a", + "lightbulb": "\f46b", + "lightning-charge-fill": "\f46c", + "lightning-charge": "\f46d", + "lightning-fill": "\f46e", + "lightning": "\f46f", + "link-45deg": "\f470", + "link": "\f471", + "linkedin": "\f472", + "list-check": "\f473", + "list-nested": "\f474", + "list-ol": "\f475", + "list-stars": "\f476", + "list-task": "\f477", + "list-ul": "\f478", + "list": "\f479", + "lock-fill": "\f47a", + "lock": "\f47b", + "mailbox": "\f47c", + "mailbox2": "\f47d", + "map-fill": "\f47e", + "map": "\f47f", + "markdown-fill": "\f480", + "markdown": "\f481", + "mask": "\f482", + "megaphone-fill": "\f483", + "megaphone": "\f484", + "menu-app-fill": "\f485", + "menu-app": "\f486", + "menu-button-fill": "\f487", + "menu-button-wide-fill": "\f488", + "menu-button-wide": "\f489", + "menu-button": "\f48a", + "menu-down": "\f48b", + "menu-up": "\f48c", + "mic-fill": "\f48d", + "mic-mute-fill": "\f48e", + "mic-mute": "\f48f", + "mic": "\f490", + "minecart-loaded": "\f491", + "minecart": "\f492", + "moisture": "\f493", + "moon-fill": "\f494", + "moon-stars-fill": "\f495", + "moon-stars": "\f496", + "moon": "\f497", + "mouse-fill": "\f498", + "mouse": "\f499", + "mouse2-fill": "\f49a", + "mouse2": "\f49b", + "mouse3-fill": "\f49c", + "mouse3": "\f49d", + "music-note-beamed": "\f49e", + "music-note-list": "\f49f", + "music-note": "\f4a0", + "music-player-fill": "\f4a1", + "music-player": "\f4a2", + "newspaper": "\f4a3", + "node-minus-fill": "\f4a4", + "node-minus": "\f4a5", + "node-plus-fill": "\f4a6", + "node-plus": "\f4a7", + "nut-fill": "\f4a8", + "nut": "\f4a9", + "octagon-fill": "\f4aa", + "octagon-half": "\f4ab", + "octagon": "\f4ac", + "option": "\f4ad", + "outlet": "\f4ae", + "paint-bucket": "\f4af", + "palette-fill": "\f4b0", + "palette": "\f4b1", + "palette2": "\f4b2", + "paperclip": "\f4b3", + "paragraph": "\f4b4", + "patch-check-fill": "\f4b5", + "patch-check": "\f4b6", + "patch-exclamation-fill": "\f4b7", + "patch-exclamation": "\f4b8", + "patch-minus-fill": "\f4b9", + "patch-minus": "\f4ba", + "patch-plus-fill": "\f4bb", + "patch-plus": "\f4bc", + "patch-question-fill": "\f4bd", + "patch-question": "\f4be", + "pause-btn-fill": "\f4bf", + "pause-btn": "\f4c0", + "pause-circle-fill": "\f4c1", + "pause-circle": "\f4c2", + "pause-fill": "\f4c3", + "pause": "\f4c4", + "peace-fill": "\f4c5", + "peace": "\f4c6", + "pen-fill": "\f4c7", + "pen": "\f4c8", + "pencil-fill": "\f4c9", + "pencil-square": "\f4ca", + "pencil": "\f4cb", + "pentagon-fill": "\f4cc", + "pentagon-half": "\f4cd", + "pentagon": "\f4ce", + "people-fill": "\f4cf", + "people": "\f4d0", + "percent": "\f4d1", + "person-badge-fill": "\f4d2", + "person-badge": "\f4d3", + "person-bounding-box": "\f4d4", + "person-check-fill": "\f4d5", + "person-check": "\f4d6", + "person-circle": "\f4d7", + "person-dash-fill": "\f4d8", + "person-dash": "\f4d9", + "person-fill": "\f4da", + "person-lines-fill": "\f4db", + "person-plus-fill": "\f4dc", + "person-plus": "\f4dd", + "person-square": "\f4de", + "person-x-fill": "\f4df", + "person-x": "\f4e0", + "person": "\f4e1", + "phone-fill": "\f4e2", + "phone-landscape-fill": "\f4e3", + "phone-landscape": "\f4e4", + "phone-vibrate-fill": "\f4e5", + "phone-vibrate": "\f4e6", + "phone": "\f4e7", + "pie-chart-fill": "\f4e8", + "pie-chart": "\f4e9", + "pin-angle-fill": "\f4ea", + "pin-angle": "\f4eb", + "pin-fill": "\f4ec", + "pin": "\f4ed", + "pip-fill": "\f4ee", + "pip": "\f4ef", + "play-btn-fill": "\f4f0", + "play-btn": "\f4f1", + "play-circle-fill": "\f4f2", + "play-circle": "\f4f3", + "play-fill": "\f4f4", + "play": "\f4f5", + "plug-fill": "\f4f6", + "plug": "\f4f7", + "plus-circle-dotted": "\f4f8", + "plus-circle-fill": "\f4f9", + "plus-circle": "\f4fa", + "plus-square-dotted": "\f4fb", + "plus-square-fill": "\f4fc", + "plus-square": "\f4fd", + "plus": "\f4fe", + "power": "\f4ff", + "printer-fill": "\f500", + "printer": "\f501", + "puzzle-fill": "\f502", + "puzzle": "\f503", + "question-circle-fill": "\f504", + "question-circle": "\f505", + "question-diamond-fill": "\f506", + "question-diamond": "\f507", + "question-octagon-fill": "\f508", + "question-octagon": "\f509", + "question-square-fill": "\f50a", + "question-square": "\f50b", + "question": "\f50c", + "rainbow": "\f50d", + "receipt-cutoff": "\f50e", + "receipt": "\f50f", + "reception-0": "\f510", + "reception-1": "\f511", + "reception-2": "\f512", + "reception-3": "\f513", + "reception-4": "\f514", + "record-btn-fill": "\f515", + "record-btn": "\f516", + "record-circle-fill": "\f517", + "record-circle": "\f518", + "record-fill": "\f519", + "record": "\f51a", + "record2-fill": "\f51b", + "record2": "\f51c", + "reply-all-fill": "\f51d", + "reply-all": "\f51e", + "reply-fill": "\f51f", + "reply": "\f520", + "rss-fill": "\f521", + "rss": "\f522", + "rulers": "\f523", + "save-fill": "\f524", + "save": "\f525", + "save2-fill": "\f526", + "save2": "\f527", + "scissors": "\f528", + "screwdriver": "\f529", + "search": "\f52a", + "segmented-nav": "\f52b", + "server": "\f52c", + "share-fill": "\f52d", + "share": "\f52e", + "shield-check": "\f52f", + "shield-exclamation": "\f530", + "shield-fill-check": "\f531", + "shield-fill-exclamation": "\f532", + "shield-fill-minus": "\f533", + "shield-fill-plus": "\f534", + "shield-fill-x": "\f535", + "shield-fill": "\f536", + "shield-lock-fill": "\f537", + "shield-lock": "\f538", + "shield-minus": "\f539", + "shield-plus": "\f53a", + "shield-shaded": "\f53b", + "shield-slash-fill": "\f53c", + "shield-slash": "\f53d", + "shield-x": "\f53e", + "shield": "\f53f", + "shift-fill": "\f540", + "shift": "\f541", + "shop-window": "\f542", + "shop": "\f543", + "shuffle": "\f544", + "signpost-2-fill": "\f545", + "signpost-2": "\f546", + "signpost-fill": "\f547", + "signpost-split-fill": "\f548", + "signpost-split": "\f549", + "signpost": "\f54a", + "sim-fill": "\f54b", + "sim": "\f54c", + "skip-backward-btn-fill": "\f54d", + "skip-backward-btn": "\f54e", + "skip-backward-circle-fill": "\f54f", + "skip-backward-circle": "\f550", + "skip-backward-fill": "\f551", + "skip-backward": "\f552", + "skip-end-btn-fill": "\f553", + "skip-end-btn": "\f554", + "skip-end-circle-fill": "\f555", + "skip-end-circle": "\f556", + "skip-end-fill": "\f557", + "skip-end": "\f558", + "skip-forward-btn-fill": "\f559", + "skip-forward-btn": "\f55a", + "skip-forward-circle-fill": "\f55b", + "skip-forward-circle": "\f55c", + "skip-forward-fill": "\f55d", + "skip-forward": "\f55e", + "skip-start-btn-fill": "\f55f", + "skip-start-btn": "\f560", + "skip-start-circle-fill": "\f561", + "skip-start-circle": "\f562", + "skip-start-fill": "\f563", + "skip-start": "\f564", + "slack": "\f565", + "slash-circle-fill": "\f566", + "slash-circle": "\f567", + "slash-square-fill": "\f568", + "slash-square": "\f569", + "slash": "\f56a", + "sliders": "\f56b", + "smartwatch": "\f56c", + "snow": "\f56d", + "snow2": "\f56e", + "snow3": "\f56f", + "sort-alpha-down-alt": "\f570", + "sort-alpha-down": "\f571", + "sort-alpha-up-alt": "\f572", + "sort-alpha-up": "\f573", + "sort-down-alt": "\f574", + "sort-down": "\f575", + "sort-numeric-down-alt": "\f576", + "sort-numeric-down": "\f577", + "sort-numeric-up-alt": "\f578", + "sort-numeric-up": "\f579", + "sort-up-alt": "\f57a", + "sort-up": "\f57b", + "soundwave": "\f57c", + "speaker-fill": "\f57d", + "speaker": "\f57e", + "speedometer": "\f57f", + "speedometer2": "\f580", + "spellcheck": "\f581", + "square-fill": "\f582", + "square-half": "\f583", + "square": "\f584", + "stack": "\f585", + "star-fill": "\f586", + "star-half": "\f587", + "star": "\f588", + "stars": "\f589", + "stickies-fill": "\f58a", + "stickies": "\f58b", + "sticky-fill": "\f58c", + "sticky": "\f58d", + "stop-btn-fill": "\f58e", + "stop-btn": "\f58f", + "stop-circle-fill": "\f590", + "stop-circle": "\f591", + "stop-fill": "\f592", + "stop": "\f593", + "stoplights-fill": "\f594", + "stoplights": "\f595", + "stopwatch-fill": "\f596", + "stopwatch": "\f597", + "subtract": "\f598", + "suit-club-fill": "\f599", + "suit-club": "\f59a", + "suit-diamond-fill": "\f59b", + "suit-diamond": "\f59c", + "suit-heart-fill": "\f59d", + "suit-heart": "\f59e", + "suit-spade-fill": "\f59f", + "suit-spade": "\f5a0", + "sun-fill": "\f5a1", + "sun": "\f5a2", + "sunglasses": "\f5a3", + "sunrise-fill": "\f5a4", + "sunrise": "\f5a5", + "sunset-fill": "\f5a6", + "sunset": "\f5a7", + "symmetry-horizontal": "\f5a8", + "symmetry-vertical": "\f5a9", + "table": "\f5aa", + "tablet-fill": "\f5ab", + "tablet-landscape-fill": "\f5ac", + "tablet-landscape": "\f5ad", + "tablet": "\f5ae", + "tag-fill": "\f5af", + "tag": "\f5b0", + "tags-fill": "\f5b1", + "tags": "\f5b2", + "telegram": "\f5b3", + "telephone-fill": "\f5b4", + "telephone-forward-fill": "\f5b5", + "telephone-forward": "\f5b6", + "telephone-inbound-fill": "\f5b7", + "telephone-inbound": "\f5b8", + "telephone-minus-fill": "\f5b9", + "telephone-minus": "\f5ba", + "telephone-outbound-fill": "\f5bb", + "telephone-outbound": "\f5bc", + "telephone-plus-fill": "\f5bd", + "telephone-plus": "\f5be", + "telephone-x-fill": "\f5bf", + "telephone-x": "\f5c0", + "telephone": "\f5c1", + "terminal-fill": "\f5c2", + "terminal": "\f5c3", + "text-center": "\f5c4", + "text-indent-left": "\f5c5", + "text-indent-right": "\f5c6", + "text-left": "\f5c7", + "text-paragraph": "\f5c8", + "text-right": "\f5c9", + "textarea-resize": "\f5ca", + "textarea-t": "\f5cb", + "textarea": "\f5cc", + "thermometer-half": "\f5cd", + "thermometer-high": "\f5ce", + "thermometer-low": "\f5cf", + "thermometer-snow": "\f5d0", + "thermometer-sun": "\f5d1", + "thermometer": "\f5d2", + "three-dots-vertical": "\f5d3", + "three-dots": "\f5d4", + "toggle-off": "\f5d5", + "toggle-on": "\f5d6", + "toggle2-off": "\f5d7", + "toggle2-on": "\f5d8", + "toggles": "\f5d9", + "toggles2": "\f5da", + "tools": "\f5db", + "tornado": "\f5dc", + "trash-fill": "\f5dd", + "trash": "\f5de", + "trash2-fill": "\f5df", + "trash2": "\f5e0", + "tree-fill": "\f5e1", + "tree": "\f5e2", + "triangle-fill": "\f5e3", + "triangle-half": "\f5e4", + "triangle": "\f5e5", + "trophy-fill": "\f5e6", + "trophy": "\f5e7", + "tropical-storm": "\f5e8", + "truck-flatbed": "\f5e9", + "truck": "\f5ea", + "tsunami": "\f5eb", + "tv-fill": "\f5ec", + "tv": "\f5ed", + "twitch": "\f5ee", + "twitter": "\f5ef", + "type-bold": "\f5f0", + "type-h1": "\f5f1", + "type-h2": "\f5f2", + "type-h3": "\f5f3", + "type-italic": "\f5f4", + "type-strikethrough": "\f5f5", + "type-underline": "\f5f6", + "type": "\f5f7", + "ui-checks-grid": "\f5f8", + "ui-checks": "\f5f9", + "ui-radios-grid": "\f5fa", + "ui-radios": "\f5fb", + "umbrella-fill": "\f5fc", + "umbrella": "\f5fd", + "union": "\f5fe", + "unlock-fill": "\f5ff", + "unlock": "\f600", + "upc-scan": "\f601", + "upc": "\f602", + "upload": "\f603", + "vector-pen": "\f604", + "view-list": "\f605", + "view-stacked": "\f606", + "vinyl-fill": "\f607", + "vinyl": "\f608", + "voicemail": "\f609", + "volume-down-fill": "\f60a", + "volume-down": "\f60b", + "volume-mute-fill": "\f60c", + "volume-mute": "\f60d", + "volume-off-fill": "\f60e", + "volume-off": "\f60f", + "volume-up-fill": "\f610", + "volume-up": "\f611", + "vr": "\f612", + "wallet-fill": "\f613", + "wallet": "\f614", + "wallet2": "\f615", + "watch": "\f616", + "water": "\f617", + "whatsapp": "\f618", + "wifi-1": "\f619", + "wifi-2": "\f61a", + "wifi-off": "\f61b", + "wifi": "\f61c", + "wind": "\f61d", + "window-dock": "\f61e", + "window-sidebar": "\f61f", + "window": "\f620", + "wrench": "\f621", + "x-circle-fill": "\f622", + "x-circle": "\f623", + "x-diamond-fill": "\f624", + "x-diamond": "\f625", + "x-octagon-fill": "\f626", + "x-octagon": "\f627", + "x-square-fill": "\f628", + "x-square": "\f629", + "x": "\f62a", + "youtube": "\f62b", + "zoom-in": "\f62c", + "zoom-out": "\f62d", + "bank": "\f62e", + "bank2": "\f62f", + "bell-slash-fill": "\f630", + "bell-slash": "\f631", + "cash-coin": "\f632", + "check-lg": "\f633", + "coin": "\f634", + "currency-bitcoin": "\f635", + "currency-dollar": "\f636", + "currency-euro": "\f637", + "currency-exchange": "\f638", + "currency-pound": "\f639", + "currency-yen": "\f63a", + "dash-lg": "\f63b", + "exclamation-lg": "\f63c", + "file-earmark-pdf-fill": "\f63d", + "file-earmark-pdf": "\f63e", + "file-pdf-fill": "\f63f", + "file-pdf": "\f640", + "gender-ambiguous": "\f641", + "gender-female": "\f642", + "gender-male": "\f643", + "gender-trans": "\f644", + "headset-vr": "\f645", + "info-lg": "\f646", + "mastodon": "\f647", + "messenger": "\f648", + "piggy-bank-fill": "\f649", + "piggy-bank": "\f64a", + "pin-map-fill": "\f64b", + "pin-map": "\f64c", + "plus-lg": "\f64d", + "question-lg": "\f64e", + "recycle": "\f64f", + "reddit": "\f650", + "safe-fill": "\f651", + "safe2-fill": "\f652", + "safe2": "\f653", + "sd-card-fill": "\f654", + "sd-card": "\f655", + "skype": "\f656", + "slash-lg": "\f657", + "translate": "\f658", + "x-lg": "\f659", + "safe": "\f65a", + "apple": "\f65b", + "microsoft": "\f65d", + "windows": "\f65e", + "behance": "\f65c", + "dribbble": "\f65f", + "line": "\f660", + "medium": "\f661", + "paypal": "\f662", + "pinterest": "\f663", + "signal": "\f664", + "snapchat": "\f665", + "spotify": "\f666", + "stack-overflow": "\f667", + "strava": "\f668", + "wordpress": "\f669", + "vimeo": "\f66a", + "activity": "\f66b", + "easel2-fill": "\f66c", + "easel2": "\f66d", + "easel3-fill": "\f66e", + "easel3": "\f66f", + "fan": "\f670", + "fingerprint": "\f671", + "graph-down-arrow": "\f672", + "graph-up-arrow": "\f673", + "hypnotize": "\f674", + "magic": "\f675", + "person-rolodex": "\f676", + "person-video": "\f677", + "person-video2": "\f678", + "person-video3": "\f679", + "person-workspace": "\f67a", + "radioactive": "\f67b", + "webcam-fill": "\f67c", + "webcam": "\f67d", + "yin-yang": "\f67e", + "bandaid-fill": "\f680", + "bandaid": "\f681", + "bluetooth": "\f682", + "body-text": "\f683", + "boombox": "\f684", + "boxes": "\f685", + "dpad-fill": "\f686", + "dpad": "\f687", + "ear-fill": "\f688", + "ear": "\f689", + "envelope-check-fill": "\f68b", + "envelope-check": "\f68c", + "envelope-dash-fill": "\f68e", + "envelope-dash": "\f68f", + "envelope-exclamation-fill": "\f691", + "envelope-exclamation": "\f692", + "envelope-plus-fill": "\f693", + "envelope-plus": "\f694", + "envelope-slash-fill": "\f696", + "envelope-slash": "\f697", + "envelope-x-fill": "\f699", + "envelope-x": "\f69a", + "explicit-fill": "\f69b", + "explicit": "\f69c", + "git": "\f69d", + "infinity": "\f69e", + "list-columns-reverse": "\f69f", + "list-columns": "\f6a0", + "meta": "\f6a1", + "nintendo-switch": "\f6a4", + "pc-display-horizontal": "\f6a5", + "pc-display": "\f6a6", + "pc-horizontal": "\f6a7", + "pc": "\f6a8", + "playstation": "\f6a9", + "plus-slash-minus": "\f6aa", + "projector-fill": "\f6ab", + "projector": "\f6ac", + "qr-code-scan": "\f6ad", + "qr-code": "\f6ae", + "quora": "\f6af", + "quote": "\f6b0", + "robot": "\f6b1", + "send-check-fill": "\f6b2", + "send-check": "\f6b3", + "send-dash-fill": "\f6b4", + "send-dash": "\f6b5", + "send-exclamation-fill": "\f6b7", + "send-exclamation": "\f6b8", + "send-fill": "\f6b9", + "send-plus-fill": "\f6ba", + "send-plus": "\f6bb", + "send-slash-fill": "\f6bc", + "send-slash": "\f6bd", + "send-x-fill": "\f6be", + "send-x": "\f6bf", + "send": "\f6c0", + "steam": "\f6c1", + "terminal-dash": "\f6c3", + "terminal-plus": "\f6c4", + "terminal-split": "\f6c5", + "ticket-detailed-fill": "\f6c6", + "ticket-detailed": "\f6c7", + "ticket-fill": "\f6c8", + "ticket-perforated-fill": "\f6c9", + "ticket-perforated": "\f6ca", + "ticket": "\f6cb", + "tiktok": "\f6cc", + "window-dash": "\f6cd", + "window-desktop": "\f6ce", + "window-fullscreen": "\f6cf", + "window-plus": "\f6d0", + "window-split": "\f6d1", + "window-stack": "\f6d2", + "window-x": "\f6d3", + "xbox": "\f6d4", + "ethernet": "\f6d5", + "hdmi-fill": "\f6d6", + "hdmi": "\f6d7", + "usb-c-fill": "\f6d8", + "usb-c": "\f6d9", + "usb-fill": "\f6da", + "usb-plug-fill": "\f6db", + "usb-plug": "\f6dc", + "usb-symbol": "\f6dd", + "usb": "\f6de", + "boombox-fill": "\f6df", + "displayport": "\f6e1", + "gpu-card": "\f6e2", + "memory": "\f6e3", + "modem-fill": "\f6e4", + "modem": "\f6e5", + "motherboard-fill": "\f6e6", + "motherboard": "\f6e7", + "optical-audio-fill": "\f6e8", + "optical-audio": "\f6e9", + "pci-card": "\f6ea", + "router-fill": "\f6eb", + "router": "\f6ec", + "thunderbolt-fill": "\f6ef", + "thunderbolt": "\f6f0", + "usb-drive-fill": "\f6f1", + "usb-drive": "\f6f2", + "usb-micro-fill": "\f6f3", + "usb-micro": "\f6f4", + "usb-mini-fill": "\f6f5", + "usb-mini": "\f6f6", + "cloud-haze2": "\f6f7", + "device-hdd-fill": "\f6f8", + "device-hdd": "\f6f9", + "device-ssd-fill": "\f6fa", + "device-ssd": "\f6fb", + "displayport-fill": "\f6fc", + "mortarboard-fill": "\f6fd", + "mortarboard": "\f6fe", + "terminal-x": "\f6ff", + "arrow-through-heart-fill": "\f700", + "arrow-through-heart": "\f701", + "badge-sd-fill": "\f702", + "badge-sd": "\f703", + "bag-heart-fill": "\f704", + "bag-heart": "\f705", + "balloon-fill": "\f706", + "balloon-heart-fill": "\f707", + "balloon-heart": "\f708", + "balloon": "\f709", + "box2-fill": "\f70a", + "box2-heart-fill": "\f70b", + "box2-heart": "\f70c", + "box2": "\f70d", + "braces-asterisk": "\f70e", + "calendar-heart-fill": "\f70f", + "calendar-heart": "\f710", + "calendar2-heart-fill": "\f711", + "calendar2-heart": "\f712", + "chat-heart-fill": "\f713", + "chat-heart": "\f714", + "chat-left-heart-fill": "\f715", + "chat-left-heart": "\f716", + "chat-right-heart-fill": "\f717", + "chat-right-heart": "\f718", + "chat-square-heart-fill": "\f719", + "chat-square-heart": "\f71a", + "clipboard-check-fill": "\f71b", + "clipboard-data-fill": "\f71c", + "clipboard-fill": "\f71d", + "clipboard-heart-fill": "\f71e", + "clipboard-heart": "\f71f", + "clipboard-minus-fill": "\f720", + "clipboard-plus-fill": "\f721", + "clipboard-pulse": "\f722", + "clipboard-x-fill": "\f723", + "clipboard2-check-fill": "\f724", + "clipboard2-check": "\f725", + "clipboard2-data-fill": "\f726", + "clipboard2-data": "\f727", + "clipboard2-fill": "\f728", + "clipboard2-heart-fill": "\f729", + "clipboard2-heart": "\f72a", + "clipboard2-minus-fill": "\f72b", + "clipboard2-minus": "\f72c", + "clipboard2-plus-fill": "\f72d", + "clipboard2-plus": "\f72e", + "clipboard2-pulse-fill": "\f72f", + "clipboard2-pulse": "\f730", + "clipboard2-x-fill": "\f731", + "clipboard2-x": "\f732", + "clipboard2": "\f733", + "emoji-kiss-fill": "\f734", + "emoji-kiss": "\f735", + "envelope-heart-fill": "\f736", + "envelope-heart": "\f737", + "envelope-open-heart-fill": "\f738", + "envelope-open-heart": "\f739", + "envelope-paper-fill": "\f73a", + "envelope-paper-heart-fill": "\f73b", + "envelope-paper-heart": "\f73c", + "envelope-paper": "\f73d", + "filetype-aac": "\f73e", + "filetype-ai": "\f73f", + "filetype-bmp": "\f740", + "filetype-cs": "\f741", + "filetype-css": "\f742", + "filetype-csv": "\f743", + "filetype-doc": "\f744", + "filetype-docx": "\f745", + "filetype-exe": "\f746", + "filetype-gif": "\f747", + "filetype-heic": "\f748", + "filetype-html": "\f749", + "filetype-java": "\f74a", + "filetype-jpg": "\f74b", + "filetype-js": "\f74c", + "filetype-jsx": "\f74d", + "filetype-key": "\f74e", + "filetype-m4p": "\f74f", + "filetype-md": "\f750", + "filetype-mdx": "\f751", + "filetype-mov": "\f752", + "filetype-mp3": "\f753", + "filetype-mp4": "\f754", + "filetype-otf": "\f755", + "filetype-pdf": "\f756", + "filetype-php": "\f757", + "filetype-png": "\f758", + "filetype-ppt": "\f75a", + "filetype-psd": "\f75b", + "filetype-py": "\f75c", + "filetype-raw": "\f75d", + "filetype-rb": "\f75e", + "filetype-sass": "\f75f", + "filetype-scss": "\f760", + "filetype-sh": "\f761", + "filetype-svg": "\f762", + "filetype-tiff": "\f763", + "filetype-tsx": "\f764", + "filetype-ttf": "\f765", + "filetype-txt": "\f766", + "filetype-wav": "\f767", + "filetype-woff": "\f768", + "filetype-xls": "\f76a", + "filetype-xml": "\f76b", + "filetype-yml": "\f76c", + "heart-arrow": "\f76d", + "heart-pulse-fill": "\f76e", + "heart-pulse": "\f76f", + "heartbreak-fill": "\f770", + "heartbreak": "\f771", + "hearts": "\f772", + "hospital-fill": "\f773", + "hospital": "\f774", + "house-heart-fill": "\f775", + "house-heart": "\f776", + "incognito": "\f777", + "magnet-fill": "\f778", + "magnet": "\f779", + "person-heart": "\f77a", + "person-hearts": "\f77b", + "phone-flip": "\f77c", + "plugin": "\f77d", + "postage-fill": "\f77e", + "postage-heart-fill": "\f77f", + "postage-heart": "\f780", + "postage": "\f781", + "postcard-fill": "\f782", + "postcard-heart-fill": "\f783", + "postcard-heart": "\f784", + "postcard": "\f785", + "search-heart-fill": "\f786", + "search-heart": "\f787", + "sliders2-vertical": "\f788", + "sliders2": "\f789", + "trash3-fill": "\f78a", + "trash3": "\f78b", + "valentine": "\f78c", + "valentine2": "\f78d", + "wrench-adjustable-circle-fill": "\f78e", + "wrench-adjustable-circle": "\f78f", + "wrench-adjustable": "\f790", + "filetype-json": "\f791", + "filetype-pptx": "\f792", + "filetype-xlsx": "\f793", + "1-circle-fill": "\f796", + "1-circle": "\f797", + "1-square-fill": "\f798", + "1-square": "\f799", + "2-circle-fill": "\f79c", + "2-circle": "\f79d", + "2-square-fill": "\f79e", + "2-square": "\f79f", + "3-circle-fill": "\f7a2", + "3-circle": "\f7a3", + "3-square-fill": "\f7a4", + "3-square": "\f7a5", + "4-circle-fill": "\f7a8", + "4-circle": "\f7a9", + "4-square-fill": "\f7aa", + "4-square": "\f7ab", + "5-circle-fill": "\f7ae", + "5-circle": "\f7af", + "5-square-fill": "\f7b0", + "5-square": "\f7b1", + "6-circle-fill": "\f7b4", + "6-circle": "\f7b5", + "6-square-fill": "\f7b6", + "6-square": "\f7b7", + "7-circle-fill": "\f7ba", + "7-circle": "\f7bb", + "7-square-fill": "\f7bc", + "7-square": "\f7bd", + "8-circle-fill": "\f7c0", + "8-circle": "\f7c1", + "8-square-fill": "\f7c2", + "8-square": "\f7c3", + "9-circle-fill": "\f7c6", + "9-circle": "\f7c7", + "9-square-fill": "\f7c8", + "9-square": "\f7c9", + "airplane-engines-fill": "\f7ca", + "airplane-engines": "\f7cb", + "airplane-fill": "\f7cc", + "airplane": "\f7cd", + "alexa": "\f7ce", + "alipay": "\f7cf", + "android": "\f7d0", + "android2": "\f7d1", + "box-fill": "\f7d2", + "box-seam-fill": "\f7d3", + "browser-chrome": "\f7d4", + "browser-edge": "\f7d5", + "browser-firefox": "\f7d6", + "browser-safari": "\f7d7", + "c-circle-fill": "\f7da", + "c-circle": "\f7db", + "c-square-fill": "\f7dc", + "c-square": "\f7dd", + "capsule-pill": "\f7de", + "capsule": "\f7df", + "car-front-fill": "\f7e0", + "car-front": "\f7e1", + "cassette-fill": "\f7e2", + "cassette": "\f7e3", + "cc-circle-fill": "\f7e6", + "cc-circle": "\f7e7", + "cc-square-fill": "\f7e8", + "cc-square": "\f7e9", + "cup-hot-fill": "\f7ea", + "cup-hot": "\f7eb", + "currency-rupee": "\f7ec", + "dropbox": "\f7ed", + "escape": "\f7ee", + "fast-forward-btn-fill": "\f7ef", + "fast-forward-btn": "\f7f0", + "fast-forward-circle-fill": "\f7f1", + "fast-forward-circle": "\f7f2", + "fast-forward-fill": "\f7f3", + "fast-forward": "\f7f4", + "filetype-sql": "\f7f5", + "fire": "\f7f6", + "google-play": "\f7f7", + "h-circle-fill": "\f7fa", + "h-circle": "\f7fb", + "h-square-fill": "\f7fc", + "h-square": "\f7fd", + "indent": "\f7fe", + "lungs-fill": "\f7ff", + "lungs": "\f800", + "microsoft-teams": "\f801", + "p-circle-fill": "\f804", + "p-circle": "\f805", + "p-square-fill": "\f806", + "p-square": "\f807", + "pass-fill": "\f808", + "pass": "\f809", + "prescription": "\f80a", + "prescription2": "\f80b", + "r-circle-fill": "\f80e", + "r-circle": "\f80f", + "r-square-fill": "\f810", + "r-square": "\f811", + "repeat-1": "\f812", + "repeat": "\f813", + "rewind-btn-fill": "\f814", + "rewind-btn": "\f815", + "rewind-circle-fill": "\f816", + "rewind-circle": "\f817", + "rewind-fill": "\f818", + "rewind": "\f819", + "train-freight-front-fill": "\f81a", + "train-freight-front": "\f81b", + "train-front-fill": "\f81c", + "train-front": "\f81d", + "train-lightrail-front-fill": "\f81e", + "train-lightrail-front": "\f81f", + "truck-front-fill": "\f820", + "truck-front": "\f821", + "ubuntu": "\f822", + "unindent": "\f823", + "unity": "\f824", + "universal-access-circle": "\f825", + "universal-access": "\f826", + "virus": "\f827", + "virus2": "\f828", + "wechat": "\f829", + "yelp": "\f82a", + "sign-stop-fill": "\f82b", + "sign-stop-lights-fill": "\f82c", + "sign-stop-lights": "\f82d", + "sign-stop": "\f82e", + "sign-turn-left-fill": "\f82f", + "sign-turn-left": "\f830", + "sign-turn-right-fill": "\f831", + "sign-turn-right": "\f832", + "sign-turn-slight-left-fill": "\f833", + "sign-turn-slight-left": "\f834", + "sign-turn-slight-right-fill": "\f835", + "sign-turn-slight-right": "\f836", + "sign-yield-fill": "\f837", + "sign-yield": "\f838", + "ev-station-fill": "\f839", + "ev-station": "\f83a", + "fuel-pump-diesel-fill": "\f83b", + "fuel-pump-diesel": "\f83c", + "fuel-pump-fill": "\f83d", + "fuel-pump": "\f83e", + "0-circle-fill": "\f83f", + "0-circle": "\f840", + "0-square-fill": "\f841", + "0-square": "\f842", + "rocket-fill": "\f843", + "rocket-takeoff-fill": "\f844", + "rocket-takeoff": "\f845", + "rocket": "\f846", + "stripe": "\f847", + "subscript": "\f848", + "superscript": "\f849", + "trello": "\f84a", + "envelope-at-fill": "\f84b", + "envelope-at": "\f84c", + "regex": "\f84d", + "text-wrap": "\f84e", + "sign-dead-end-fill": "\f84f", + "sign-dead-end": "\f850", + "sign-do-not-enter-fill": "\f851", + "sign-do-not-enter": "\f852", + "sign-intersection-fill": "\f853", + "sign-intersection-side-fill": "\f854", + "sign-intersection-side": "\f855", + "sign-intersection-t-fill": "\f856", + "sign-intersection-t": "\f857", + "sign-intersection-y-fill": "\f858", + "sign-intersection-y": "\f859", + "sign-intersection": "\f85a", + "sign-merge-left-fill": "\f85b", + "sign-merge-left": "\f85c", + "sign-merge-right-fill": "\f85d", + "sign-merge-right": "\f85e", + "sign-no-left-turn-fill": "\f85f", + "sign-no-left-turn": "\f860", + "sign-no-parking-fill": "\f861", + "sign-no-parking": "\f862", + "sign-no-right-turn-fill": "\f863", + "sign-no-right-turn": "\f864", + "sign-railroad-fill": "\f865", + "sign-railroad": "\f866", + "building-add": "\f867", + "building-check": "\f868", + "building-dash": "\f869", + "building-down": "\f86a", + "building-exclamation": "\f86b", + "building-fill-add": "\f86c", + "building-fill-check": "\f86d", + "building-fill-dash": "\f86e", + "building-fill-down": "\f86f", + "building-fill-exclamation": "\f870", + "building-fill-gear": "\f871", + "building-fill-lock": "\f872", + "building-fill-slash": "\f873", + "building-fill-up": "\f874", + "building-fill-x": "\f875", + "building-fill": "\f876", + "building-gear": "\f877", + "building-lock": "\f878", + "building-slash": "\f879", + "building-up": "\f87a", + "building-x": "\f87b", + "buildings-fill": "\f87c", + "buildings": "\f87d", + "bus-front-fill": "\f87e", + "bus-front": "\f87f", + "ev-front-fill": "\f880", + "ev-front": "\f881", + "globe-americas": "\f882", + "globe-asia-australia": "\f883", + "globe-central-south-asia": "\f884", + "globe-europe-africa": "\f885", + "house-add-fill": "\f886", + "house-add": "\f887", + "house-check-fill": "\f888", + "house-check": "\f889", + "house-dash-fill": "\f88a", + "house-dash": "\f88b", + "house-down-fill": "\f88c", + "house-down": "\f88d", + "house-exclamation-fill": "\f88e", + "house-exclamation": "\f88f", + "house-gear-fill": "\f890", + "house-gear": "\f891", + "house-lock-fill": "\f892", + "house-lock": "\f893", + "house-slash-fill": "\f894", + "house-slash": "\f895", + "house-up-fill": "\f896", + "house-up": "\f897", + "house-x-fill": "\f898", + "house-x": "\f899", + "person-add": "\f89a", + "person-down": "\f89b", + "person-exclamation": "\f89c", + "person-fill-add": "\f89d", + "person-fill-check": "\f89e", + "person-fill-dash": "\f89f", + "person-fill-down": "\f8a0", + "person-fill-exclamation": "\f8a1", + "person-fill-gear": "\f8a2", + "person-fill-lock": "\f8a3", + "person-fill-slash": "\f8a4", + "person-fill-up": "\f8a5", + "person-fill-x": "\f8a6", + "person-gear": "\f8a7", + "person-lock": "\f8a8", + "person-slash": "\f8a9", + "person-up": "\f8aa", + "scooter": "\f8ab", + "taxi-front-fill": "\f8ac", + "taxi-front": "\f8ad", + "amd": "\f8ae", + "database-add": "\f8af", + "database-check": "\f8b0", + "database-dash": "\f8b1", + "database-down": "\f8b2", + "database-exclamation": "\f8b3", + "database-fill-add": "\f8b4", + "database-fill-check": "\f8b5", + "database-fill-dash": "\f8b6", + "database-fill-down": "\f8b7", + "database-fill-exclamation": "\f8b8", + "database-fill-gear": "\f8b9", + "database-fill-lock": "\f8ba", + "database-fill-slash": "\f8bb", + "database-fill-up": "\f8bc", + "database-fill-x": "\f8bd", + "database-fill": "\f8be", + "database-gear": "\f8bf", + "database-lock": "\f8c0", + "database-slash": "\f8c1", + "database-up": "\f8c2", + "database-x": "\f8c3", + "database": "\f8c4", + "houses-fill": "\f8c5", + "houses": "\f8c6", + "nvidia": "\f8c7", + "person-vcard-fill": "\f8c8", + "person-vcard": "\f8c9", + "sina-weibo": "\f8ca", + "tencent-qq": "\f8cb", + "wikipedia": "\f8cc", + "alphabet-uppercase": "\f2a5", + "alphabet": "\f68a", + "amazon": "\f68d", + "arrows-collapse-vertical": "\f690", + "arrows-expand-vertical": "\f695", + "arrows-vertical": "\f698", + "arrows": "\f6a2", + "ban-fill": "\f6a3", + "ban": "\f6b6", + "bing": "\f6c2", + "cake": "\f6e0", + "cake2": "\f6ed", + "cookie": "\f6ee", + "copy": "\f759", + "crosshair": "\f769", + "crosshair2": "\f794", + "emoji-astonished-fill": "\f795", + "emoji-astonished": "\f79a", + "emoji-grimace-fill": "\f79b", + "emoji-grimace": "\f7a0", + "emoji-grin-fill": "\f7a1", + "emoji-grin": "\f7a6", + "emoji-surprise-fill": "\f7a7", + "emoji-surprise": "\f7ac", + "emoji-tear-fill": "\f7ad", + "emoji-tear": "\f7b2", + "envelope-arrow-down-fill": "\f7b3", + "envelope-arrow-down": "\f7b8", + "envelope-arrow-up-fill": "\f7b9", + "envelope-arrow-up": "\f7be", + "feather": "\f7bf", + "feather2": "\f7c4", + "floppy-fill": "\f7c5", + "floppy": "\f7d8", + "floppy2-fill": "\f7d9", + "floppy2": "\f7e4", + "gitlab": "\f7e5", + "highlighter": "\f7f8", + "marker-tip": "\f802", + "nvme-fill": "\f803", + "nvme": "\f80c", + "opencollective": "\f80d", + "pci-card-network": "\f8cd", + "pci-card-sound": "\f8ce", + "radar": "\f8cf", + "send-arrow-down-fill": "\f8d0", + "send-arrow-down": "\f8d1", + "send-arrow-up-fill": "\f8d2", + "send-arrow-up": "\f8d3", + "sim-slash-fill": "\f8d4", + "sim-slash": "\f8d5", + "sourceforge": "\f8d6", + "substack": "\f8d7", + "threads-fill": "\f8d8", + "threads": "\f8d9", + "transparency": "\f8da", + "twitter-x": "\f8db", + "type-h4": "\f8dc", + "type-h5": "\f8dd", + "type-h6": "\f8de", + "backpack-fill": "\f8df", + "backpack": "\f8e0", + "backpack2-fill": "\f8e1", + "backpack2": "\f8e2", + "backpack3-fill": "\f8e3", + "backpack3": "\f8e4", + "backpack4-fill": "\f8e5", + "backpack4": "\f8e6", + "brilliance": "\f8e7", + "cake-fill": "\f8e8", + "cake2-fill": "\f8e9", + "duffle-fill": "\f8ea", + "duffle": "\f8eb", + "exposure": "\f8ec", + "gender-neuter": "\f8ed", + "highlights": "\f8ee", + "luggage-fill": "\f8ef", + "luggage": "\f8f0", + "mailbox-flag": "\f8f1", + "mailbox2-flag": "\f8f2", + "noise-reduction": "\f8f3", + "passport-fill": "\f8f4", + "passport": "\f8f5", + "person-arms-up": "\f8f6", + "person-raised-hand": "\f8f7", + "person-standing-dress": "\f8f8", + "person-standing": "\f8f9", + "person-walking": "\f8fa", + "person-wheelchair": "\f8fb", + "shadows": "\f8fc", + "suitcase-fill": "\f8fd", + "suitcase-lg-fill": "\f8fe", + "suitcase-lg": "\f8ff", + "suitcase": "\f900", + "suitcase2-fill": "\f901", + "suitcase2": "\f902", + "vignette": "\f903", +); + +@each $icon, $codepoint in $bootstrap-icons-map { + .bi-#{$icon}::before { content: $codepoint; } +} diff --git a/assets/static/bootstrap-icons/font/fonts/bootstrap-icons.woff b/assets/static/bootstrap-icons/font/fonts/bootstrap-icons.woff new file mode 100644 index 0000000000000000000000000000000000000000..51204d27de92c7bb0f8bed6165b9dc888f38ff38 GIT binary patch literal 176032 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 literal 0 HcmV?d00001 diff --git a/assets/static/bootstrap-icons/font/fonts/bootstrap-icons.woff2 b/assets/static/bootstrap-icons/font/fonts/bootstrap-icons.woff2 new file mode 100644 index 0000000000000000000000000000000000000000..92c4830216044ba21db9f4294b887312e80da38e GIT binary patch literal 130396 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Ã=hYmg-7dH4?&*NqqtUL18qtx> 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 z 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 + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/forward-fill.svg b/assets/static/bootstrap-icons/forward-fill.svg new file mode 100644 index 0000000..27462e2 --- /dev/null +++ b/assets/static/bootstrap-icons/forward-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/forward.svg b/assets/static/bootstrap-icons/forward.svg new file mode 100644 index 0000000..ffe887c --- /dev/null +++ b/assets/static/bootstrap-icons/forward.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/front.svg b/assets/static/bootstrap-icons/front.svg new file mode 100644 index 0000000..59d854e --- /dev/null +++ b/assets/static/bootstrap-icons/front.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fuel-pump-diesel-fill.svg b/assets/static/bootstrap-icons/fuel-pump-diesel-fill.svg new file mode 100644 index 0000000..997d6f8 --- /dev/null +++ b/assets/static/bootstrap-icons/fuel-pump-diesel-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fuel-pump-diesel.svg b/assets/static/bootstrap-icons/fuel-pump-diesel.svg new file mode 100644 index 0000000..e170eeb --- /dev/null +++ b/assets/static/bootstrap-icons/fuel-pump-diesel.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fuel-pump-fill.svg b/assets/static/bootstrap-icons/fuel-pump-fill.svg new file mode 100644 index 0000000..46f92c3 --- /dev/null +++ b/assets/static/bootstrap-icons/fuel-pump-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fuel-pump.svg b/assets/static/bootstrap-icons/fuel-pump.svg new file mode 100644 index 0000000..1704a6f --- /dev/null +++ b/assets/static/bootstrap-icons/fuel-pump.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fullscreen-exit.svg b/assets/static/bootstrap-icons/fullscreen-exit.svg new file mode 100644 index 0000000..cfde3a3 --- /dev/null +++ b/assets/static/bootstrap-icons/fullscreen-exit.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/fullscreen.svg b/assets/static/bootstrap-icons/fullscreen.svg new file mode 100644 index 0000000..d4f8a83 --- /dev/null +++ b/assets/static/bootstrap-icons/fullscreen.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/funnel-fill.svg b/assets/static/bootstrap-icons/funnel-fill.svg new file mode 100644 index 0000000..04d31a6 --- /dev/null +++ b/assets/static/bootstrap-icons/funnel-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/funnel.svg b/assets/static/bootstrap-icons/funnel.svg new file mode 100644 index 0000000..28bfcf2 --- /dev/null +++ b/assets/static/bootstrap-icons/funnel.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/gear-fill.svg b/assets/static/bootstrap-icons/gear-fill.svg new file mode 100644 index 0000000..ba8e2c5 --- /dev/null +++ b/assets/static/bootstrap-icons/gear-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/gear-wide-connected.svg b/assets/static/bootstrap-icons/gear-wide-connected.svg new file mode 100644 index 0000000..19ddda9 --- /dev/null +++ b/assets/static/bootstrap-icons/gear-wide-connected.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/gear-wide.svg b/assets/static/bootstrap-icons/gear-wide.svg new file mode 100644 index 0000000..c5de567 --- /dev/null +++ b/assets/static/bootstrap-icons/gear-wide.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/gear.svg b/assets/static/bootstrap-icons/gear.svg new file mode 100644 index 0000000..30cfaa3 --- /dev/null +++ b/assets/static/bootstrap-icons/gear.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/gem.svg b/assets/static/bootstrap-icons/gem.svg new file mode 100644 index 0000000..f56d871 --- /dev/null +++ b/assets/static/bootstrap-icons/gem.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/gender-ambiguous.svg b/assets/static/bootstrap-icons/gender-ambiguous.svg new file mode 100644 index 0000000..674c526 --- /dev/null +++ b/assets/static/bootstrap-icons/gender-ambiguous.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/gender-female.svg b/assets/static/bootstrap-icons/gender-female.svg new file mode 100644 index 0000000..ae6dc27 --- /dev/null +++ b/assets/static/bootstrap-icons/gender-female.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/gender-male.svg b/assets/static/bootstrap-icons/gender-male.svg new file mode 100644 index 0000000..3931921 --- /dev/null +++ b/assets/static/bootstrap-icons/gender-male.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/gender-neuter.svg b/assets/static/bootstrap-icons/gender-neuter.svg new file mode 100644 index 0000000..133db1a --- /dev/null +++ b/assets/static/bootstrap-icons/gender-neuter.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/gender-trans.svg b/assets/static/bootstrap-icons/gender-trans.svg new file mode 100644 index 0000000..005e6f8 --- /dev/null +++ b/assets/static/bootstrap-icons/gender-trans.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/geo-alt-fill.svg b/assets/static/bootstrap-icons/geo-alt-fill.svg new file mode 100644 index 0000000..77f0478 --- /dev/null +++ b/assets/static/bootstrap-icons/geo-alt-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/geo-alt.svg b/assets/static/bootstrap-icons/geo-alt.svg new file mode 100644 index 0000000..20e18ba --- /dev/null +++ b/assets/static/bootstrap-icons/geo-alt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/geo-fill.svg b/assets/static/bootstrap-icons/geo-fill.svg new file mode 100644 index 0000000..9678fa0 --- /dev/null +++ b/assets/static/bootstrap-icons/geo-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/geo.svg b/assets/static/bootstrap-icons/geo.svg new file mode 100644 index 0000000..2382b91 --- /dev/null +++ b/assets/static/bootstrap-icons/geo.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/gift-fill.svg b/assets/static/bootstrap-icons/gift-fill.svg new file mode 100644 index 0000000..bd78a8c --- /dev/null +++ b/assets/static/bootstrap-icons/gift-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/gift.svg b/assets/static/bootstrap-icons/gift.svg new file mode 100644 index 0000000..5921507 --- /dev/null +++ b/assets/static/bootstrap-icons/gift.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/git.svg b/assets/static/bootstrap-icons/git.svg new file mode 100644 index 0000000..0979cdb --- /dev/null +++ b/assets/static/bootstrap-icons/git.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/github.svg b/assets/static/bootstrap-icons/github.svg new file mode 100644 index 0000000..013e025 --- /dev/null +++ b/assets/static/bootstrap-icons/github.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/gitlab.svg b/assets/static/bootstrap-icons/gitlab.svg new file mode 100644 index 0000000..f8875f8 --- /dev/null +++ b/assets/static/bootstrap-icons/gitlab.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/globe-americas.svg b/assets/static/bootstrap-icons/globe-americas.svg new file mode 100644 index 0000000..5dcc7b2 --- /dev/null +++ b/assets/static/bootstrap-icons/globe-americas.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/globe-asia-australia.svg b/assets/static/bootstrap-icons/globe-asia-australia.svg new file mode 100644 index 0000000..8c27539 --- /dev/null +++ b/assets/static/bootstrap-icons/globe-asia-australia.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/globe-central-south-asia.svg b/assets/static/bootstrap-icons/globe-central-south-asia.svg new file mode 100644 index 0000000..80a13c1 --- /dev/null +++ b/assets/static/bootstrap-icons/globe-central-south-asia.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/globe-europe-africa.svg b/assets/static/bootstrap-icons/globe-europe-africa.svg new file mode 100644 index 0000000..c1c5dcb --- /dev/null +++ b/assets/static/bootstrap-icons/globe-europe-africa.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/globe.svg b/assets/static/bootstrap-icons/globe.svg new file mode 100644 index 0000000..835ff66 --- /dev/null +++ b/assets/static/bootstrap-icons/globe.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/globe2.svg b/assets/static/bootstrap-icons/globe2.svg new file mode 100644 index 0000000..b302063 --- /dev/null +++ b/assets/static/bootstrap-icons/globe2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/google-play.svg b/assets/static/bootstrap-icons/google-play.svg new file mode 100644 index 0000000..0751c90 --- /dev/null +++ b/assets/static/bootstrap-icons/google-play.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/google.svg b/assets/static/bootstrap-icons/google.svg new file mode 100644 index 0000000..9f603de --- /dev/null +++ b/assets/static/bootstrap-icons/google.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/gpu-card.svg b/assets/static/bootstrap-icons/gpu-card.svg new file mode 100644 index 0000000..6ec3152 --- /dev/null +++ b/assets/static/bootstrap-icons/gpu-card.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/graph-down-arrow.svg b/assets/static/bootstrap-icons/graph-down-arrow.svg new file mode 100644 index 0000000..d811884 --- /dev/null +++ b/assets/static/bootstrap-icons/graph-down-arrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/graph-down.svg b/assets/static/bootstrap-icons/graph-down.svg new file mode 100644 index 0000000..47dd647 --- /dev/null +++ b/assets/static/bootstrap-icons/graph-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/graph-up-arrow.svg b/assets/static/bootstrap-icons/graph-up-arrow.svg new file mode 100644 index 0000000..7eda5f4 --- /dev/null +++ b/assets/static/bootstrap-icons/graph-up-arrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/graph-up.svg b/assets/static/bootstrap-icons/graph-up.svg new file mode 100644 index 0000000..15e0bbf --- /dev/null +++ b/assets/static/bootstrap-icons/graph-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/grid-1x2-fill.svg b/assets/static/bootstrap-icons/grid-1x2-fill.svg new file mode 100644 index 0000000..cc568cb --- /dev/null +++ b/assets/static/bootstrap-icons/grid-1x2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/grid-1x2.svg b/assets/static/bootstrap-icons/grid-1x2.svg new file mode 100644 index 0000000..69ec79f --- /dev/null +++ b/assets/static/bootstrap-icons/grid-1x2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/grid-3x2-gap-fill.svg b/assets/static/bootstrap-icons/grid-3x2-gap-fill.svg new file mode 100644 index 0000000..9c0e855 --- /dev/null +++ b/assets/static/bootstrap-icons/grid-3x2-gap-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/grid-3x2-gap.svg b/assets/static/bootstrap-icons/grid-3x2-gap.svg new file mode 100644 index 0000000..730ae65 --- /dev/null +++ b/assets/static/bootstrap-icons/grid-3x2-gap.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/grid-3x2.svg b/assets/static/bootstrap-icons/grid-3x2.svg new file mode 100644 index 0000000..55ff9bb --- /dev/null +++ b/assets/static/bootstrap-icons/grid-3x2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/grid-3x3-gap-fill.svg b/assets/static/bootstrap-icons/grid-3x3-gap-fill.svg new file mode 100644 index 0000000..982cb70 --- /dev/null +++ b/assets/static/bootstrap-icons/grid-3x3-gap-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/grid-3x3-gap.svg b/assets/static/bootstrap-icons/grid-3x3-gap.svg new file mode 100644 index 0000000..bbf8ce4 --- /dev/null +++ b/assets/static/bootstrap-icons/grid-3x3-gap.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/grid-3x3.svg b/assets/static/bootstrap-icons/grid-3x3.svg new file mode 100644 index 0000000..d56aed7 --- /dev/null +++ b/assets/static/bootstrap-icons/grid-3x3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/grid-fill.svg b/assets/static/bootstrap-icons/grid-fill.svg new file mode 100644 index 0000000..356cc8f --- /dev/null +++ b/assets/static/bootstrap-icons/grid-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/grid.svg b/assets/static/bootstrap-icons/grid.svg new file mode 100644 index 0000000..eebab73 --- /dev/null +++ b/assets/static/bootstrap-icons/grid.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/grip-horizontal.svg b/assets/static/bootstrap-icons/grip-horizontal.svg new file mode 100644 index 0000000..85f7e27 --- /dev/null +++ b/assets/static/bootstrap-icons/grip-horizontal.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/grip-vertical.svg b/assets/static/bootstrap-icons/grip-vertical.svg new file mode 100644 index 0000000..a8718ab --- /dev/null +++ b/assets/static/bootstrap-icons/grip-vertical.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/h-circle-fill.svg b/assets/static/bootstrap-icons/h-circle-fill.svg new file mode 100644 index 0000000..9106472 --- /dev/null +++ b/assets/static/bootstrap-icons/h-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/h-circle.svg b/assets/static/bootstrap-icons/h-circle.svg new file mode 100644 index 0000000..53c34b6 --- /dev/null +++ b/assets/static/bootstrap-icons/h-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/h-square-fill.svg b/assets/static/bootstrap-icons/h-square-fill.svg new file mode 100644 index 0000000..06269e0 --- /dev/null +++ b/assets/static/bootstrap-icons/h-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/h-square.svg b/assets/static/bootstrap-icons/h-square.svg new file mode 100644 index 0000000..2c5ad2c --- /dev/null +++ b/assets/static/bootstrap-icons/h-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hammer.svg b/assets/static/bootstrap-icons/hammer.svg new file mode 100644 index 0000000..8e07b5b --- /dev/null +++ b/assets/static/bootstrap-icons/hammer.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hand-index-fill.svg b/assets/static/bootstrap-icons/hand-index-fill.svg new file mode 100644 index 0000000..b2a7d64 --- /dev/null +++ b/assets/static/bootstrap-icons/hand-index-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hand-index-thumb-fill.svg b/assets/static/bootstrap-icons/hand-index-thumb-fill.svg new file mode 100644 index 0000000..774b18e --- /dev/null +++ b/assets/static/bootstrap-icons/hand-index-thumb-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hand-index-thumb.svg b/assets/static/bootstrap-icons/hand-index-thumb.svg new file mode 100644 index 0000000..13b5475 --- /dev/null +++ b/assets/static/bootstrap-icons/hand-index-thumb.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hand-index.svg b/assets/static/bootstrap-icons/hand-index.svg new file mode 100644 index 0000000..725757b --- /dev/null +++ b/assets/static/bootstrap-icons/hand-index.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hand-thumbs-down-fill.svg b/assets/static/bootstrap-icons/hand-thumbs-down-fill.svg new file mode 100644 index 0000000..53584f3 --- /dev/null +++ b/assets/static/bootstrap-icons/hand-thumbs-down-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hand-thumbs-down.svg b/assets/static/bootstrap-icons/hand-thumbs-down.svg new file mode 100644 index 0000000..f87f523 --- /dev/null +++ b/assets/static/bootstrap-icons/hand-thumbs-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hand-thumbs-up-fill.svg b/assets/static/bootstrap-icons/hand-thumbs-up-fill.svg new file mode 100644 index 0000000..c68bc07 --- /dev/null +++ b/assets/static/bootstrap-icons/hand-thumbs-up-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hand-thumbs-up.svg b/assets/static/bootstrap-icons/hand-thumbs-up.svg new file mode 100644 index 0000000..dc46d4d --- /dev/null +++ b/assets/static/bootstrap-icons/hand-thumbs-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/handbag-fill.svg b/assets/static/bootstrap-icons/handbag-fill.svg new file mode 100644 index 0000000..5f8f23f --- /dev/null +++ b/assets/static/bootstrap-icons/handbag-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/handbag.svg b/assets/static/bootstrap-icons/handbag.svg new file mode 100644 index 0000000..c9ef874 --- /dev/null +++ b/assets/static/bootstrap-icons/handbag.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hash.svg b/assets/static/bootstrap-icons/hash.svg new file mode 100644 index 0000000..f67d000 --- /dev/null +++ b/assets/static/bootstrap-icons/hash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hdd-fill.svg b/assets/static/bootstrap-icons/hdd-fill.svg new file mode 100644 index 0000000..dbeda24 --- /dev/null +++ b/assets/static/bootstrap-icons/hdd-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hdd-network-fill.svg b/assets/static/bootstrap-icons/hdd-network-fill.svg new file mode 100644 index 0000000..a74874d --- /dev/null +++ b/assets/static/bootstrap-icons/hdd-network-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hdd-network.svg b/assets/static/bootstrap-icons/hdd-network.svg new file mode 100644 index 0000000..7223542 --- /dev/null +++ b/assets/static/bootstrap-icons/hdd-network.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hdd-rack-fill.svg b/assets/static/bootstrap-icons/hdd-rack-fill.svg new file mode 100644 index 0000000..7c33aec --- /dev/null +++ b/assets/static/bootstrap-icons/hdd-rack-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hdd-rack.svg b/assets/static/bootstrap-icons/hdd-rack.svg new file mode 100644 index 0000000..d19a514 --- /dev/null +++ b/assets/static/bootstrap-icons/hdd-rack.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hdd-stack-fill.svg b/assets/static/bootstrap-icons/hdd-stack-fill.svg new file mode 100644 index 0000000..27e8719 --- /dev/null +++ b/assets/static/bootstrap-icons/hdd-stack-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hdd-stack.svg b/assets/static/bootstrap-icons/hdd-stack.svg new file mode 100644 index 0000000..f9095e5 --- /dev/null +++ b/assets/static/bootstrap-icons/hdd-stack.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hdd.svg b/assets/static/bootstrap-icons/hdd.svg new file mode 100644 index 0000000..92358f7 --- /dev/null +++ b/assets/static/bootstrap-icons/hdd.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hdmi-fill.svg b/assets/static/bootstrap-icons/hdmi-fill.svg new file mode 100644 index 0000000..435b39d --- /dev/null +++ b/assets/static/bootstrap-icons/hdmi-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hdmi.svg b/assets/static/bootstrap-icons/hdmi.svg new file mode 100644 index 0000000..09d0849 --- /dev/null +++ b/assets/static/bootstrap-icons/hdmi.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/headphones.svg b/assets/static/bootstrap-icons/headphones.svg new file mode 100644 index 0000000..d50b3ee --- /dev/null +++ b/assets/static/bootstrap-icons/headphones.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/headset-vr.svg b/assets/static/bootstrap-icons/headset-vr.svg new file mode 100644 index 0000000..0498bd6 --- /dev/null +++ b/assets/static/bootstrap-icons/headset-vr.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/headset.svg b/assets/static/bootstrap-icons/headset.svg new file mode 100644 index 0000000..a921156 --- /dev/null +++ b/assets/static/bootstrap-icons/headset.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/heart-arrow.svg b/assets/static/bootstrap-icons/heart-arrow.svg new file mode 100644 index 0000000..45eb6a5 --- /dev/null +++ b/assets/static/bootstrap-icons/heart-arrow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/heart-fill.svg b/assets/static/bootstrap-icons/heart-fill.svg new file mode 100644 index 0000000..5e6b8ee --- /dev/null +++ b/assets/static/bootstrap-icons/heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/heart-half.svg b/assets/static/bootstrap-icons/heart-half.svg new file mode 100644 index 0000000..2e0dd31 --- /dev/null +++ b/assets/static/bootstrap-icons/heart-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/heart-pulse-fill.svg b/assets/static/bootstrap-icons/heart-pulse-fill.svg new file mode 100644 index 0000000..fc5e219 --- /dev/null +++ b/assets/static/bootstrap-icons/heart-pulse-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/heart-pulse.svg b/assets/static/bootstrap-icons/heart-pulse.svg new file mode 100644 index 0000000..dd957b3 --- /dev/null +++ b/assets/static/bootstrap-icons/heart-pulse.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/heart.svg b/assets/static/bootstrap-icons/heart.svg new file mode 100644 index 0000000..cd8eeb1 --- /dev/null +++ b/assets/static/bootstrap-icons/heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/heartbreak-fill.svg b/assets/static/bootstrap-icons/heartbreak-fill.svg new file mode 100644 index 0000000..335cb6a --- /dev/null +++ b/assets/static/bootstrap-icons/heartbreak-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/heartbreak.svg b/assets/static/bootstrap-icons/heartbreak.svg new file mode 100644 index 0000000..dcffc89 --- /dev/null +++ b/assets/static/bootstrap-icons/heartbreak.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hearts.svg b/assets/static/bootstrap-icons/hearts.svg new file mode 100644 index 0000000..ebd2dbb --- /dev/null +++ b/assets/static/bootstrap-icons/hearts.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/heptagon-fill.svg b/assets/static/bootstrap-icons/heptagon-fill.svg new file mode 100644 index 0000000..a339328 --- /dev/null +++ b/assets/static/bootstrap-icons/heptagon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/heptagon-half.svg b/assets/static/bootstrap-icons/heptagon-half.svg new file mode 100644 index 0000000..b4fadcf --- /dev/null +++ b/assets/static/bootstrap-icons/heptagon-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/heptagon.svg b/assets/static/bootstrap-icons/heptagon.svg new file mode 100644 index 0000000..3140b8b --- /dev/null +++ b/assets/static/bootstrap-icons/heptagon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hexagon-fill.svg b/assets/static/bootstrap-icons/hexagon-fill.svg new file mode 100644 index 0000000..50fdbfb --- /dev/null +++ b/assets/static/bootstrap-icons/hexagon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hexagon-half.svg b/assets/static/bootstrap-icons/hexagon-half.svg new file mode 100644 index 0000000..452cb6e --- /dev/null +++ b/assets/static/bootstrap-icons/hexagon-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hexagon.svg b/assets/static/bootstrap-icons/hexagon.svg new file mode 100644 index 0000000..6e83939 --- /dev/null +++ b/assets/static/bootstrap-icons/hexagon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/highlighter.svg b/assets/static/bootstrap-icons/highlighter.svg new file mode 100644 index 0000000..e26f1f7 --- /dev/null +++ b/assets/static/bootstrap-icons/highlighter.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/highlights.svg b/assets/static/bootstrap-icons/highlights.svg new file mode 100644 index 0000000..b43fca0 --- /dev/null +++ b/assets/static/bootstrap-icons/highlights.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hospital-fill.svg b/assets/static/bootstrap-icons/hospital-fill.svg new file mode 100644 index 0000000..55bde0f --- /dev/null +++ b/assets/static/bootstrap-icons/hospital-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hospital.svg b/assets/static/bootstrap-icons/hospital.svg new file mode 100644 index 0000000..f6bd0da --- /dev/null +++ b/assets/static/bootstrap-icons/hospital.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hourglass-bottom.svg b/assets/static/bootstrap-icons/hourglass-bottom.svg new file mode 100644 index 0000000..946f882 --- /dev/null +++ b/assets/static/bootstrap-icons/hourglass-bottom.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hourglass-split.svg b/assets/static/bootstrap-icons/hourglass-split.svg new file mode 100644 index 0000000..a9d1c51 --- /dev/null +++ b/assets/static/bootstrap-icons/hourglass-split.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hourglass-top.svg b/assets/static/bootstrap-icons/hourglass-top.svg new file mode 100644 index 0000000..6a8a4a3 --- /dev/null +++ b/assets/static/bootstrap-icons/hourglass-top.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hourglass.svg b/assets/static/bootstrap-icons/hourglass.svg new file mode 100644 index 0000000..44ede0a --- /dev/null +++ b/assets/static/bootstrap-icons/hourglass.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-add-fill.svg b/assets/static/bootstrap-icons/house-add-fill.svg new file mode 100644 index 0000000..1e814ee --- /dev/null +++ b/assets/static/bootstrap-icons/house-add-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-add.svg b/assets/static/bootstrap-icons/house-add.svg new file mode 100644 index 0000000..2a89bbe --- /dev/null +++ b/assets/static/bootstrap-icons/house-add.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-check-fill.svg b/assets/static/bootstrap-icons/house-check-fill.svg new file mode 100644 index 0000000..f2ddeb9 --- /dev/null +++ b/assets/static/bootstrap-icons/house-check-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-check.svg b/assets/static/bootstrap-icons/house-check.svg new file mode 100644 index 0000000..5bd7900 --- /dev/null +++ b/assets/static/bootstrap-icons/house-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-dash-fill.svg b/assets/static/bootstrap-icons/house-dash-fill.svg new file mode 100644 index 0000000..2fa8c57 --- /dev/null +++ b/assets/static/bootstrap-icons/house-dash-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-dash.svg b/assets/static/bootstrap-icons/house-dash.svg new file mode 100644 index 0000000..b1cb832 --- /dev/null +++ b/assets/static/bootstrap-icons/house-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-door-fill.svg b/assets/static/bootstrap-icons/house-door-fill.svg new file mode 100644 index 0000000..cf6d439 --- /dev/null +++ b/assets/static/bootstrap-icons/house-door-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-door.svg b/assets/static/bootstrap-icons/house-door.svg new file mode 100644 index 0000000..daa093b --- /dev/null +++ b/assets/static/bootstrap-icons/house-door.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-down-fill.svg b/assets/static/bootstrap-icons/house-down-fill.svg new file mode 100644 index 0000000..351904f --- /dev/null +++ b/assets/static/bootstrap-icons/house-down-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-down.svg b/assets/static/bootstrap-icons/house-down.svg new file mode 100644 index 0000000..4d1d905 --- /dev/null +++ b/assets/static/bootstrap-icons/house-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-exclamation-fill.svg b/assets/static/bootstrap-icons/house-exclamation-fill.svg new file mode 100644 index 0000000..52fc0ae --- /dev/null +++ b/assets/static/bootstrap-icons/house-exclamation-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-exclamation.svg b/assets/static/bootstrap-icons/house-exclamation.svg new file mode 100644 index 0000000..6d414f3 --- /dev/null +++ b/assets/static/bootstrap-icons/house-exclamation.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-fill.svg b/assets/static/bootstrap-icons/house-fill.svg new file mode 100644 index 0000000..89db164 --- /dev/null +++ b/assets/static/bootstrap-icons/house-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-gear-fill.svg b/assets/static/bootstrap-icons/house-gear-fill.svg new file mode 100644 index 0000000..9003152 --- /dev/null +++ b/assets/static/bootstrap-icons/house-gear-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-gear.svg b/assets/static/bootstrap-icons/house-gear.svg new file mode 100644 index 0000000..65b5abb --- /dev/null +++ b/assets/static/bootstrap-icons/house-gear.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-heart-fill.svg b/assets/static/bootstrap-icons/house-heart-fill.svg new file mode 100644 index 0000000..be2e5f4 --- /dev/null +++ b/assets/static/bootstrap-icons/house-heart-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-heart.svg b/assets/static/bootstrap-icons/house-heart.svg new file mode 100644 index 0000000..ece6c06 --- /dev/null +++ b/assets/static/bootstrap-icons/house-heart.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-lock-fill.svg b/assets/static/bootstrap-icons/house-lock-fill.svg new file mode 100644 index 0000000..90cc8c7 --- /dev/null +++ b/assets/static/bootstrap-icons/house-lock-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-lock.svg b/assets/static/bootstrap-icons/house-lock.svg new file mode 100644 index 0000000..8dc5894 --- /dev/null +++ b/assets/static/bootstrap-icons/house-lock.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-slash-fill.svg b/assets/static/bootstrap-icons/house-slash-fill.svg new file mode 100644 index 0000000..df8d7c6 --- /dev/null +++ b/assets/static/bootstrap-icons/house-slash-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-slash.svg b/assets/static/bootstrap-icons/house-slash.svg new file mode 100644 index 0000000..a81b0ed --- /dev/null +++ b/assets/static/bootstrap-icons/house-slash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-up-fill.svg b/assets/static/bootstrap-icons/house-up-fill.svg new file mode 100644 index 0000000..5e6a801 --- /dev/null +++ b/assets/static/bootstrap-icons/house-up-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-up.svg b/assets/static/bootstrap-icons/house-up.svg new file mode 100644 index 0000000..da183d2 --- /dev/null +++ b/assets/static/bootstrap-icons/house-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-x-fill.svg b/assets/static/bootstrap-icons/house-x-fill.svg new file mode 100644 index 0000000..729cdb5 --- /dev/null +++ b/assets/static/bootstrap-icons/house-x-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house-x.svg b/assets/static/bootstrap-icons/house-x.svg new file mode 100644 index 0000000..68137c0 --- /dev/null +++ b/assets/static/bootstrap-icons/house-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/house.svg b/assets/static/bootstrap-icons/house.svg new file mode 100644 index 0000000..cb57f68 --- /dev/null +++ b/assets/static/bootstrap-icons/house.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/houses-fill.svg b/assets/static/bootstrap-icons/houses-fill.svg new file mode 100644 index 0000000..63047bb --- /dev/null +++ b/assets/static/bootstrap-icons/houses-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/houses.svg b/assets/static/bootstrap-icons/houses.svg new file mode 100644 index 0000000..3a906be --- /dev/null +++ b/assets/static/bootstrap-icons/houses.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hr.svg b/assets/static/bootstrap-icons/hr.svg new file mode 100644 index 0000000..6e9fbd8 --- /dev/null +++ b/assets/static/bootstrap-icons/hr.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hurricane.svg b/assets/static/bootstrap-icons/hurricane.svg new file mode 100644 index 0000000..5bd9ae1 --- /dev/null +++ b/assets/static/bootstrap-icons/hurricane.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/hypnotize.svg b/assets/static/bootstrap-icons/hypnotize.svg new file mode 100644 index 0000000..6a28997 --- /dev/null +++ b/assets/static/bootstrap-icons/hypnotize.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/image-alt.svg b/assets/static/bootstrap-icons/image-alt.svg new file mode 100644 index 0000000..e56ee20 --- /dev/null +++ b/assets/static/bootstrap-icons/image-alt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/image-fill.svg b/assets/static/bootstrap-icons/image-fill.svg new file mode 100644 index 0000000..db26ae8 --- /dev/null +++ b/assets/static/bootstrap-icons/image-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/image.svg b/assets/static/bootstrap-icons/image.svg new file mode 100644 index 0000000..152c333 --- /dev/null +++ b/assets/static/bootstrap-icons/image.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/images.svg b/assets/static/bootstrap-icons/images.svg new file mode 100644 index 0000000..adc7abf --- /dev/null +++ b/assets/static/bootstrap-icons/images.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/inbox-fill.svg b/assets/static/bootstrap-icons/inbox-fill.svg new file mode 100644 index 0000000..7e4816d --- /dev/null +++ b/assets/static/bootstrap-icons/inbox-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/inbox.svg b/assets/static/bootstrap-icons/inbox.svg new file mode 100644 index 0000000..b60e949 --- /dev/null +++ b/assets/static/bootstrap-icons/inbox.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/inboxes-fill.svg b/assets/static/bootstrap-icons/inboxes-fill.svg new file mode 100644 index 0000000..4d8c5f7 --- /dev/null +++ b/assets/static/bootstrap-icons/inboxes-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/inboxes.svg b/assets/static/bootstrap-icons/inboxes.svg new file mode 100644 index 0000000..1a074ac --- /dev/null +++ b/assets/static/bootstrap-icons/inboxes.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/incognito.svg b/assets/static/bootstrap-icons/incognito.svg new file mode 100644 index 0000000..f2c8f9d --- /dev/null +++ b/assets/static/bootstrap-icons/incognito.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/indent.svg b/assets/static/bootstrap-icons/indent.svg new file mode 100644 index 0000000..0065aba --- /dev/null +++ b/assets/static/bootstrap-icons/indent.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/infinity.svg b/assets/static/bootstrap-icons/infinity.svg new file mode 100644 index 0000000..3dca19b --- /dev/null +++ b/assets/static/bootstrap-icons/infinity.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/info-circle-fill.svg b/assets/static/bootstrap-icons/info-circle-fill.svg new file mode 100644 index 0000000..d2e382b --- /dev/null +++ b/assets/static/bootstrap-icons/info-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/info-circle.svg b/assets/static/bootstrap-icons/info-circle.svg new file mode 100644 index 0000000..e2b50eb --- /dev/null +++ b/assets/static/bootstrap-icons/info-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/info-lg.svg b/assets/static/bootstrap-icons/info-lg.svg new file mode 100644 index 0000000..ac064b9 --- /dev/null +++ b/assets/static/bootstrap-icons/info-lg.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/info-square-fill.svg b/assets/static/bootstrap-icons/info-square-fill.svg new file mode 100644 index 0000000..49196b4 --- /dev/null +++ b/assets/static/bootstrap-icons/info-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/info-square.svg b/assets/static/bootstrap-icons/info-square.svg new file mode 100644 index 0000000..b64cfa8 --- /dev/null +++ b/assets/static/bootstrap-icons/info-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/info.svg b/assets/static/bootstrap-icons/info.svg new file mode 100644 index 0000000..43dc242 --- /dev/null +++ b/assets/static/bootstrap-icons/info.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/input-cursor-text.svg b/assets/static/bootstrap-icons/input-cursor-text.svg new file mode 100644 index 0000000..fc910f3 --- /dev/null +++ b/assets/static/bootstrap-icons/input-cursor-text.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/input-cursor.svg b/assets/static/bootstrap-icons/input-cursor.svg new file mode 100644 index 0000000..de6a35f --- /dev/null +++ b/assets/static/bootstrap-icons/input-cursor.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/instagram.svg b/assets/static/bootstrap-icons/instagram.svg new file mode 100644 index 0000000..855e653 --- /dev/null +++ b/assets/static/bootstrap-icons/instagram.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/intersect.svg b/assets/static/bootstrap-icons/intersect.svg new file mode 100644 index 0000000..220141d --- /dev/null +++ b/assets/static/bootstrap-icons/intersect.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journal-album.svg b/assets/static/bootstrap-icons/journal-album.svg new file mode 100644 index 0000000..de49ccc --- /dev/null +++ b/assets/static/bootstrap-icons/journal-album.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journal-arrow-down.svg b/assets/static/bootstrap-icons/journal-arrow-down.svg new file mode 100644 index 0000000..d922f3c --- /dev/null +++ b/assets/static/bootstrap-icons/journal-arrow-down.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journal-arrow-up.svg b/assets/static/bootstrap-icons/journal-arrow-up.svg new file mode 100644 index 0000000..7edc400 --- /dev/null +++ b/assets/static/bootstrap-icons/journal-arrow-up.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journal-bookmark-fill.svg b/assets/static/bootstrap-icons/journal-bookmark-fill.svg new file mode 100644 index 0000000..8e2f17a --- /dev/null +++ b/assets/static/bootstrap-icons/journal-bookmark-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journal-bookmark.svg b/assets/static/bootstrap-icons/journal-bookmark.svg new file mode 100644 index 0000000..4a8f4bb --- /dev/null +++ b/assets/static/bootstrap-icons/journal-bookmark.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journal-check.svg b/assets/static/bootstrap-icons/journal-check.svg new file mode 100644 index 0000000..eb398b9 --- /dev/null +++ b/assets/static/bootstrap-icons/journal-check.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journal-code.svg b/assets/static/bootstrap-icons/journal-code.svg new file mode 100644 index 0000000..41430d2 --- /dev/null +++ b/assets/static/bootstrap-icons/journal-code.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journal-medical.svg b/assets/static/bootstrap-icons/journal-medical.svg new file mode 100644 index 0000000..fb6d942 --- /dev/null +++ b/assets/static/bootstrap-icons/journal-medical.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journal-minus.svg b/assets/static/bootstrap-icons/journal-minus.svg new file mode 100644 index 0000000..cbdfdd7 --- /dev/null +++ b/assets/static/bootstrap-icons/journal-minus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journal-plus.svg b/assets/static/bootstrap-icons/journal-plus.svg new file mode 100644 index 0000000..5cb82c3 --- /dev/null +++ b/assets/static/bootstrap-icons/journal-plus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journal-richtext.svg b/assets/static/bootstrap-icons/journal-richtext.svg new file mode 100644 index 0000000..db92c70 --- /dev/null +++ b/assets/static/bootstrap-icons/journal-richtext.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journal-text.svg b/assets/static/bootstrap-icons/journal-text.svg new file mode 100644 index 0000000..13c58bc --- /dev/null +++ b/assets/static/bootstrap-icons/journal-text.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journal-x.svg b/assets/static/bootstrap-icons/journal-x.svg new file mode 100644 index 0000000..fb3ea9f --- /dev/null +++ b/assets/static/bootstrap-icons/journal-x.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journal.svg b/assets/static/bootstrap-icons/journal.svg new file mode 100644 index 0000000..4c166e2 --- /dev/null +++ b/assets/static/bootstrap-icons/journal.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/journals.svg b/assets/static/bootstrap-icons/journals.svg new file mode 100644 index 0000000..6e5386a --- /dev/null +++ b/assets/static/bootstrap-icons/journals.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/joystick.svg b/assets/static/bootstrap-icons/joystick.svg new file mode 100644 index 0000000..909369e --- /dev/null +++ b/assets/static/bootstrap-icons/joystick.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/justify-left.svg b/assets/static/bootstrap-icons/justify-left.svg new file mode 100644 index 0000000..17b45e4 --- /dev/null +++ b/assets/static/bootstrap-icons/justify-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/justify-right.svg b/assets/static/bootstrap-icons/justify-right.svg new file mode 100644 index 0000000..4d96c43 --- /dev/null +++ b/assets/static/bootstrap-icons/justify-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/justify.svg b/assets/static/bootstrap-icons/justify.svg new file mode 100644 index 0000000..3eedc74 --- /dev/null +++ b/assets/static/bootstrap-icons/justify.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/kanban-fill.svg b/assets/static/bootstrap-icons/kanban-fill.svg new file mode 100644 index 0000000..a8ed5bb --- /dev/null +++ b/assets/static/bootstrap-icons/kanban-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/kanban.svg b/assets/static/bootstrap-icons/kanban.svg new file mode 100644 index 0000000..cd13b32 --- /dev/null +++ b/assets/static/bootstrap-icons/kanban.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/key-fill.svg b/assets/static/bootstrap-icons/key-fill.svg new file mode 100644 index 0000000..fdab8d6 --- /dev/null +++ b/assets/static/bootstrap-icons/key-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/key.svg b/assets/static/bootstrap-icons/key.svg new file mode 100644 index 0000000..b0d1e16 --- /dev/null +++ b/assets/static/bootstrap-icons/key.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/keyboard-fill.svg b/assets/static/bootstrap-icons/keyboard-fill.svg new file mode 100644 index 0000000..b46ad2d --- /dev/null +++ b/assets/static/bootstrap-icons/keyboard-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/keyboard.svg b/assets/static/bootstrap-icons/keyboard.svg new file mode 100644 index 0000000..8ba49b6 --- /dev/null +++ b/assets/static/bootstrap-icons/keyboard.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ladder.svg b/assets/static/bootstrap-icons/ladder.svg new file mode 100644 index 0000000..7c6864f --- /dev/null +++ b/assets/static/bootstrap-icons/ladder.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/lamp-fill.svg b/assets/static/bootstrap-icons/lamp-fill.svg new file mode 100644 index 0000000..836b0db --- /dev/null +++ b/assets/static/bootstrap-icons/lamp-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/lamp.svg b/assets/static/bootstrap-icons/lamp.svg new file mode 100644 index 0000000..b3fa1d6 --- /dev/null +++ b/assets/static/bootstrap-icons/lamp.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/laptop-fill.svg b/assets/static/bootstrap-icons/laptop-fill.svg new file mode 100644 index 0000000..31e5880 --- /dev/null +++ b/assets/static/bootstrap-icons/laptop-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/laptop.svg b/assets/static/bootstrap-icons/laptop.svg new file mode 100644 index 0000000..8e71020 --- /dev/null +++ b/assets/static/bootstrap-icons/laptop.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layer-backward.svg b/assets/static/bootstrap-icons/layer-backward.svg new file mode 100644 index 0000000..ed43c70 --- /dev/null +++ b/assets/static/bootstrap-icons/layer-backward.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layer-forward.svg b/assets/static/bootstrap-icons/layer-forward.svg new file mode 100644 index 0000000..d0a4abf --- /dev/null +++ b/assets/static/bootstrap-icons/layer-forward.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layers-fill.svg b/assets/static/bootstrap-icons/layers-fill.svg new file mode 100644 index 0000000..3b6cdf6 --- /dev/null +++ b/assets/static/bootstrap-icons/layers-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layers-half.svg b/assets/static/bootstrap-icons/layers-half.svg new file mode 100644 index 0000000..8ceaaad --- /dev/null +++ b/assets/static/bootstrap-icons/layers-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layers.svg b/assets/static/bootstrap-icons/layers.svg new file mode 100644 index 0000000..52dbe79 --- /dev/null +++ b/assets/static/bootstrap-icons/layers.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layout-sidebar-inset-reverse.svg b/assets/static/bootstrap-icons/layout-sidebar-inset-reverse.svg new file mode 100644 index 0000000..0d8dc7f --- /dev/null +++ b/assets/static/bootstrap-icons/layout-sidebar-inset-reverse.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layout-sidebar-inset.svg b/assets/static/bootstrap-icons/layout-sidebar-inset.svg new file mode 100644 index 0000000..cc19c86 --- /dev/null +++ b/assets/static/bootstrap-icons/layout-sidebar-inset.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layout-sidebar-reverse.svg b/assets/static/bootstrap-icons/layout-sidebar-reverse.svg new file mode 100644 index 0000000..7c03f73 --- /dev/null +++ b/assets/static/bootstrap-icons/layout-sidebar-reverse.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layout-sidebar.svg b/assets/static/bootstrap-icons/layout-sidebar.svg new file mode 100644 index 0000000..ff40858 --- /dev/null +++ b/assets/static/bootstrap-icons/layout-sidebar.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layout-split.svg b/assets/static/bootstrap-icons/layout-split.svg new file mode 100644 index 0000000..4805b25 --- /dev/null +++ b/assets/static/bootstrap-icons/layout-split.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layout-text-sidebar-reverse.svg b/assets/static/bootstrap-icons/layout-text-sidebar-reverse.svg new file mode 100644 index 0000000..9179285 --- /dev/null +++ b/assets/static/bootstrap-icons/layout-text-sidebar-reverse.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layout-text-sidebar.svg b/assets/static/bootstrap-icons/layout-text-sidebar.svg new file mode 100644 index 0000000..6d89f67 --- /dev/null +++ b/assets/static/bootstrap-icons/layout-text-sidebar.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layout-text-window-reverse.svg b/assets/static/bootstrap-icons/layout-text-window-reverse.svg new file mode 100644 index 0000000..8258ad3 --- /dev/null +++ b/assets/static/bootstrap-icons/layout-text-window-reverse.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layout-text-window.svg b/assets/static/bootstrap-icons/layout-text-window.svg new file mode 100644 index 0000000..4d27cf9 --- /dev/null +++ b/assets/static/bootstrap-icons/layout-text-window.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layout-three-columns.svg b/assets/static/bootstrap-icons/layout-three-columns.svg new file mode 100644 index 0000000..7117f07 --- /dev/null +++ b/assets/static/bootstrap-icons/layout-three-columns.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/layout-wtf.svg b/assets/static/bootstrap-icons/layout-wtf.svg new file mode 100644 index 0000000..fd8f5a1 --- /dev/null +++ b/assets/static/bootstrap-icons/layout-wtf.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/life-preserver.svg b/assets/static/bootstrap-icons/life-preserver.svg new file mode 100644 index 0000000..7282baa --- /dev/null +++ b/assets/static/bootstrap-icons/life-preserver.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/lightbulb-fill.svg b/assets/static/bootstrap-icons/lightbulb-fill.svg new file mode 100644 index 0000000..0ef90ea --- /dev/null +++ b/assets/static/bootstrap-icons/lightbulb-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/lightbulb-off-fill.svg b/assets/static/bootstrap-icons/lightbulb-off-fill.svg new file mode 100644 index 0000000..e533739 --- /dev/null +++ b/assets/static/bootstrap-icons/lightbulb-off-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/lightbulb-off.svg b/assets/static/bootstrap-icons/lightbulb-off.svg new file mode 100644 index 0000000..15e8200 --- /dev/null +++ b/assets/static/bootstrap-icons/lightbulb-off.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/lightbulb.svg b/assets/static/bootstrap-icons/lightbulb.svg new file mode 100644 index 0000000..67bf5bd --- /dev/null +++ b/assets/static/bootstrap-icons/lightbulb.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/lightning-charge-fill.svg b/assets/static/bootstrap-icons/lightning-charge-fill.svg new file mode 100644 index 0000000..5e197fb --- /dev/null +++ b/assets/static/bootstrap-icons/lightning-charge-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/lightning-charge.svg b/assets/static/bootstrap-icons/lightning-charge.svg new file mode 100644 index 0000000..5352e72 --- /dev/null +++ b/assets/static/bootstrap-icons/lightning-charge.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/lightning-fill.svg b/assets/static/bootstrap-icons/lightning-fill.svg new file mode 100644 index 0000000..b98af68 --- /dev/null +++ b/assets/static/bootstrap-icons/lightning-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/lightning.svg b/assets/static/bootstrap-icons/lightning.svg new file mode 100644 index 0000000..d2faa0f --- /dev/null +++ b/assets/static/bootstrap-icons/lightning.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/line.svg b/assets/static/bootstrap-icons/line.svg new file mode 100644 index 0000000..3e4bfd3 --- /dev/null +++ b/assets/static/bootstrap-icons/line.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/link-45deg.svg b/assets/static/bootstrap-icons/link-45deg.svg new file mode 100644 index 0000000..abdc8cb --- /dev/null +++ b/assets/static/bootstrap-icons/link-45deg.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/link.svg b/assets/static/bootstrap-icons/link.svg new file mode 100644 index 0000000..823e4cd --- /dev/null +++ b/assets/static/bootstrap-icons/link.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/linkedin.svg b/assets/static/bootstrap-icons/linkedin.svg new file mode 100644 index 0000000..30fc0e3 --- /dev/null +++ b/assets/static/bootstrap-icons/linkedin.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/list-check.svg b/assets/static/bootstrap-icons/list-check.svg new file mode 100644 index 0000000..e1db377 --- /dev/null +++ b/assets/static/bootstrap-icons/list-check.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/list-columns-reverse.svg b/assets/static/bootstrap-icons/list-columns-reverse.svg new file mode 100644 index 0000000..f5e2876 --- /dev/null +++ b/assets/static/bootstrap-icons/list-columns-reverse.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/list-columns.svg b/assets/static/bootstrap-icons/list-columns.svg new file mode 100644 index 0000000..07d0b1a --- /dev/null +++ b/assets/static/bootstrap-icons/list-columns.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/list-nested.svg b/assets/static/bootstrap-icons/list-nested.svg new file mode 100644 index 0000000..26607c9 --- /dev/null +++ b/assets/static/bootstrap-icons/list-nested.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/list-ol.svg b/assets/static/bootstrap-icons/list-ol.svg new file mode 100644 index 0000000..d111f73 --- /dev/null +++ b/assets/static/bootstrap-icons/list-ol.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/list-stars.svg b/assets/static/bootstrap-icons/list-stars.svg new file mode 100644 index 0000000..c520bdf --- /dev/null +++ b/assets/static/bootstrap-icons/list-stars.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/list-task.svg b/assets/static/bootstrap-icons/list-task.svg new file mode 100644 index 0000000..3905d7a --- /dev/null +++ b/assets/static/bootstrap-icons/list-task.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/list-ul.svg b/assets/static/bootstrap-icons/list-ul.svg new file mode 100644 index 0000000..f1cc202 --- /dev/null +++ b/assets/static/bootstrap-icons/list-ul.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/list.svg b/assets/static/bootstrap-icons/list.svg new file mode 100644 index 0000000..de58858 --- /dev/null +++ b/assets/static/bootstrap-icons/list.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/lock-fill.svg b/assets/static/bootstrap-icons/lock-fill.svg new file mode 100644 index 0000000..69646f6 --- /dev/null +++ b/assets/static/bootstrap-icons/lock-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/lock.svg b/assets/static/bootstrap-icons/lock.svg new file mode 100644 index 0000000..9c730b7 --- /dev/null +++ b/assets/static/bootstrap-icons/lock.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/luggage-fill.svg b/assets/static/bootstrap-icons/luggage-fill.svg new file mode 100644 index 0000000..eb7378f --- /dev/null +++ b/assets/static/bootstrap-icons/luggage-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/luggage.svg b/assets/static/bootstrap-icons/luggage.svg new file mode 100644 index 0000000..ad037ba --- /dev/null +++ b/assets/static/bootstrap-icons/luggage.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/lungs-fill.svg b/assets/static/bootstrap-icons/lungs-fill.svg new file mode 100644 index 0000000..2880fa6 --- /dev/null +++ b/assets/static/bootstrap-icons/lungs-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/lungs.svg b/assets/static/bootstrap-icons/lungs.svg new file mode 100644 index 0000000..082e7de --- /dev/null +++ b/assets/static/bootstrap-icons/lungs.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/magic.svg b/assets/static/bootstrap-icons/magic.svg new file mode 100644 index 0000000..0b2f1fd --- /dev/null +++ b/assets/static/bootstrap-icons/magic.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/magnet-fill.svg b/assets/static/bootstrap-icons/magnet-fill.svg new file mode 100644 index 0000000..026d0de --- /dev/null +++ b/assets/static/bootstrap-icons/magnet-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/magnet.svg b/assets/static/bootstrap-icons/magnet.svg new file mode 100644 index 0000000..36b238b --- /dev/null +++ b/assets/static/bootstrap-icons/magnet.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mailbox-flag.svg b/assets/static/bootstrap-icons/mailbox-flag.svg new file mode 100644 index 0000000..8e24db0 --- /dev/null +++ b/assets/static/bootstrap-icons/mailbox-flag.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mailbox.svg b/assets/static/bootstrap-icons/mailbox.svg new file mode 100644 index 0000000..1048e2a --- /dev/null +++ b/assets/static/bootstrap-icons/mailbox.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mailbox2-flag.svg b/assets/static/bootstrap-icons/mailbox2-flag.svg new file mode 100644 index 0000000..a253700 --- /dev/null +++ b/assets/static/bootstrap-icons/mailbox2-flag.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mailbox2.svg b/assets/static/bootstrap-icons/mailbox2.svg new file mode 100644 index 0000000..33e22a6 --- /dev/null +++ b/assets/static/bootstrap-icons/mailbox2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/map-fill.svg b/assets/static/bootstrap-icons/map-fill.svg new file mode 100644 index 0000000..7134540 --- /dev/null +++ b/assets/static/bootstrap-icons/map-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/map.svg b/assets/static/bootstrap-icons/map.svg new file mode 100644 index 0000000..2b579ce --- /dev/null +++ b/assets/static/bootstrap-icons/map.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/markdown-fill.svg b/assets/static/bootstrap-icons/markdown-fill.svg new file mode 100644 index 0000000..a932fbb --- /dev/null +++ b/assets/static/bootstrap-icons/markdown-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/markdown.svg b/assets/static/bootstrap-icons/markdown.svg new file mode 100644 index 0000000..33962c6 --- /dev/null +++ b/assets/static/bootstrap-icons/markdown.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/marker-tip.svg b/assets/static/bootstrap-icons/marker-tip.svg new file mode 100644 index 0000000..e00f931 --- /dev/null +++ b/assets/static/bootstrap-icons/marker-tip.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mask.svg b/assets/static/bootstrap-icons/mask.svg new file mode 100644 index 0000000..b51158c --- /dev/null +++ b/assets/static/bootstrap-icons/mask.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mastodon.svg b/assets/static/bootstrap-icons/mastodon.svg new file mode 100644 index 0000000..a8c2a26 --- /dev/null +++ b/assets/static/bootstrap-icons/mastodon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/medium.svg b/assets/static/bootstrap-icons/medium.svg new file mode 100644 index 0000000..065ace1 --- /dev/null +++ b/assets/static/bootstrap-icons/medium.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/megaphone-fill.svg b/assets/static/bootstrap-icons/megaphone-fill.svg new file mode 100644 index 0000000..9f44f2e --- /dev/null +++ b/assets/static/bootstrap-icons/megaphone-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/megaphone.svg b/assets/static/bootstrap-icons/megaphone.svg new file mode 100644 index 0000000..1cedb30 --- /dev/null +++ b/assets/static/bootstrap-icons/megaphone.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/memory.svg b/assets/static/bootstrap-icons/memory.svg new file mode 100644 index 0000000..48764d2 --- /dev/null +++ b/assets/static/bootstrap-icons/memory.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/menu-app-fill.svg b/assets/static/bootstrap-icons/menu-app-fill.svg new file mode 100644 index 0000000..65cfdcf --- /dev/null +++ b/assets/static/bootstrap-icons/menu-app-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/menu-app.svg b/assets/static/bootstrap-icons/menu-app.svg new file mode 100644 index 0000000..ecda144 --- /dev/null +++ b/assets/static/bootstrap-icons/menu-app.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/menu-button-fill.svg b/assets/static/bootstrap-icons/menu-button-fill.svg new file mode 100644 index 0000000..09b2805 --- /dev/null +++ b/assets/static/bootstrap-icons/menu-button-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/menu-button-wide-fill.svg b/assets/static/bootstrap-icons/menu-button-wide-fill.svg new file mode 100644 index 0000000..d97ce7f --- /dev/null +++ b/assets/static/bootstrap-icons/menu-button-wide-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/menu-button-wide.svg b/assets/static/bootstrap-icons/menu-button-wide.svg new file mode 100644 index 0000000..5636c10 --- /dev/null +++ b/assets/static/bootstrap-icons/menu-button-wide.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/menu-button.svg b/assets/static/bootstrap-icons/menu-button.svg new file mode 100644 index 0000000..ec4c70a --- /dev/null +++ b/assets/static/bootstrap-icons/menu-button.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/menu-down.svg b/assets/static/bootstrap-icons/menu-down.svg new file mode 100644 index 0000000..e53a5e9 --- /dev/null +++ b/assets/static/bootstrap-icons/menu-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/menu-up.svg b/assets/static/bootstrap-icons/menu-up.svg new file mode 100644 index 0000000..96ff58b --- /dev/null +++ b/assets/static/bootstrap-icons/menu-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/messenger.svg b/assets/static/bootstrap-icons/messenger.svg new file mode 100644 index 0000000..e896a79 --- /dev/null +++ b/assets/static/bootstrap-icons/messenger.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/meta.svg b/assets/static/bootstrap-icons/meta.svg new file mode 100644 index 0000000..03155a1 --- /dev/null +++ b/assets/static/bootstrap-icons/meta.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mic-fill.svg b/assets/static/bootstrap-icons/mic-fill.svg new file mode 100644 index 0000000..c92ade7 --- /dev/null +++ b/assets/static/bootstrap-icons/mic-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mic-mute-fill.svg b/assets/static/bootstrap-icons/mic-mute-fill.svg new file mode 100644 index 0000000..a10a1bc --- /dev/null +++ b/assets/static/bootstrap-icons/mic-mute-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mic-mute.svg b/assets/static/bootstrap-icons/mic-mute.svg new file mode 100644 index 0000000..59b04be --- /dev/null +++ b/assets/static/bootstrap-icons/mic-mute.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mic.svg b/assets/static/bootstrap-icons/mic.svg new file mode 100644 index 0000000..f07bf14 --- /dev/null +++ b/assets/static/bootstrap-icons/mic.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/microsoft-teams.svg b/assets/static/bootstrap-icons/microsoft-teams.svg new file mode 100644 index 0000000..6bf3a0c --- /dev/null +++ b/assets/static/bootstrap-icons/microsoft-teams.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/microsoft.svg b/assets/static/bootstrap-icons/microsoft.svg new file mode 100644 index 0000000..8d2a03c --- /dev/null +++ b/assets/static/bootstrap-icons/microsoft.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/minecart-loaded.svg b/assets/static/bootstrap-icons/minecart-loaded.svg new file mode 100644 index 0000000..48e523f --- /dev/null +++ b/assets/static/bootstrap-icons/minecart-loaded.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/minecart.svg b/assets/static/bootstrap-icons/minecart.svg new file mode 100644 index 0000000..c4869c2 --- /dev/null +++ b/assets/static/bootstrap-icons/minecart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/modem-fill.svg b/assets/static/bootstrap-icons/modem-fill.svg new file mode 100644 index 0000000..a5dd5e2 --- /dev/null +++ b/assets/static/bootstrap-icons/modem-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/modem.svg b/assets/static/bootstrap-icons/modem.svg new file mode 100644 index 0000000..f90ad6b --- /dev/null +++ b/assets/static/bootstrap-icons/modem.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/moisture.svg b/assets/static/bootstrap-icons/moisture.svg new file mode 100644 index 0000000..490fb49 --- /dev/null +++ b/assets/static/bootstrap-icons/moisture.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/moon-fill.svg b/assets/static/bootstrap-icons/moon-fill.svg new file mode 100644 index 0000000..67f6739 --- /dev/null +++ b/assets/static/bootstrap-icons/moon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/moon-stars-fill.svg b/assets/static/bootstrap-icons/moon-stars-fill.svg new file mode 100644 index 0000000..c50e070 --- /dev/null +++ b/assets/static/bootstrap-icons/moon-stars-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/moon-stars.svg b/assets/static/bootstrap-icons/moon-stars.svg new file mode 100644 index 0000000..ae138c2 --- /dev/null +++ b/assets/static/bootstrap-icons/moon-stars.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/moon.svg b/assets/static/bootstrap-icons/moon.svg new file mode 100644 index 0000000..46458ec --- /dev/null +++ b/assets/static/bootstrap-icons/moon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mortarboard-fill.svg b/assets/static/bootstrap-icons/mortarboard-fill.svg new file mode 100644 index 0000000..02f6c8c --- /dev/null +++ b/assets/static/bootstrap-icons/mortarboard-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mortarboard.svg b/assets/static/bootstrap-icons/mortarboard.svg new file mode 100644 index 0000000..94f9e97 --- /dev/null +++ b/assets/static/bootstrap-icons/mortarboard.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/motherboard-fill.svg b/assets/static/bootstrap-icons/motherboard-fill.svg new file mode 100644 index 0000000..fabff97 --- /dev/null +++ b/assets/static/bootstrap-icons/motherboard-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/motherboard.svg b/assets/static/bootstrap-icons/motherboard.svg new file mode 100644 index 0000000..d29e255 --- /dev/null +++ b/assets/static/bootstrap-icons/motherboard.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mouse-fill.svg b/assets/static/bootstrap-icons/mouse-fill.svg new file mode 100644 index 0000000..24d275e --- /dev/null +++ b/assets/static/bootstrap-icons/mouse-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mouse.svg b/assets/static/bootstrap-icons/mouse.svg new file mode 100644 index 0000000..e018811 --- /dev/null +++ b/assets/static/bootstrap-icons/mouse.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mouse2-fill.svg b/assets/static/bootstrap-icons/mouse2-fill.svg new file mode 100644 index 0000000..6277b44 --- /dev/null +++ b/assets/static/bootstrap-icons/mouse2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mouse2.svg b/assets/static/bootstrap-icons/mouse2.svg new file mode 100644 index 0000000..fd15e7c --- /dev/null +++ b/assets/static/bootstrap-icons/mouse2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mouse3-fill.svg b/assets/static/bootstrap-icons/mouse3-fill.svg new file mode 100644 index 0000000..16c1705 --- /dev/null +++ b/assets/static/bootstrap-icons/mouse3-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/mouse3.svg b/assets/static/bootstrap-icons/mouse3.svg new file mode 100644 index 0000000..548b244 --- /dev/null +++ b/assets/static/bootstrap-icons/mouse3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/music-note-beamed.svg b/assets/static/bootstrap-icons/music-note-beamed.svg new file mode 100644 index 0000000..9eb1506 --- /dev/null +++ b/assets/static/bootstrap-icons/music-note-beamed.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/music-note-list.svg b/assets/static/bootstrap-icons/music-note-list.svg new file mode 100644 index 0000000..d33767d --- /dev/null +++ b/assets/static/bootstrap-icons/music-note-list.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/music-note.svg b/assets/static/bootstrap-icons/music-note.svg new file mode 100644 index 0000000..d6fe21e --- /dev/null +++ b/assets/static/bootstrap-icons/music-note.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/music-player-fill.svg b/assets/static/bootstrap-icons/music-player-fill.svg new file mode 100644 index 0000000..68a65b5 --- /dev/null +++ b/assets/static/bootstrap-icons/music-player-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/music-player.svg b/assets/static/bootstrap-icons/music-player.svg new file mode 100644 index 0000000..7eb9c92 --- /dev/null +++ b/assets/static/bootstrap-icons/music-player.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/newspaper.svg b/assets/static/bootstrap-icons/newspaper.svg new file mode 100644 index 0000000..9a1cf6d --- /dev/null +++ b/assets/static/bootstrap-icons/newspaper.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/nintendo-switch.svg b/assets/static/bootstrap-icons/nintendo-switch.svg new file mode 100644 index 0000000..5849493 --- /dev/null +++ b/assets/static/bootstrap-icons/nintendo-switch.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/node-minus-fill.svg b/assets/static/bootstrap-icons/node-minus-fill.svg new file mode 100644 index 0000000..802d678 --- /dev/null +++ b/assets/static/bootstrap-icons/node-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/node-minus.svg b/assets/static/bootstrap-icons/node-minus.svg new file mode 100644 index 0000000..8ffaa38 --- /dev/null +++ b/assets/static/bootstrap-icons/node-minus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/node-plus-fill.svg b/assets/static/bootstrap-icons/node-plus-fill.svg new file mode 100644 index 0000000..9559b26 --- /dev/null +++ b/assets/static/bootstrap-icons/node-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/node-plus.svg b/assets/static/bootstrap-icons/node-plus.svg new file mode 100644 index 0000000..028ef28 --- /dev/null +++ b/assets/static/bootstrap-icons/node-plus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/noise-reduction.svg b/assets/static/bootstrap-icons/noise-reduction.svg new file mode 100644 index 0000000..cd5e288 --- /dev/null +++ b/assets/static/bootstrap-icons/noise-reduction.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/nut-fill.svg b/assets/static/bootstrap-icons/nut-fill.svg new file mode 100644 index 0000000..18dfeb1 --- /dev/null +++ b/assets/static/bootstrap-icons/nut-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/nut.svg b/assets/static/bootstrap-icons/nut.svg new file mode 100644 index 0000000..75a401d --- /dev/null +++ b/assets/static/bootstrap-icons/nut.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/nvidia.svg b/assets/static/bootstrap-icons/nvidia.svg new file mode 100644 index 0000000..438a6fc --- /dev/null +++ b/assets/static/bootstrap-icons/nvidia.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/nvme-fill.svg b/assets/static/bootstrap-icons/nvme-fill.svg new file mode 100644 index 0000000..962c3c6 --- /dev/null +++ b/assets/static/bootstrap-icons/nvme-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/nvme.svg b/assets/static/bootstrap-icons/nvme.svg new file mode 100644 index 0000000..31a2fb6 --- /dev/null +++ b/assets/static/bootstrap-icons/nvme.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/octagon-fill.svg b/assets/static/bootstrap-icons/octagon-fill.svg new file mode 100644 index 0000000..73c80f0 --- /dev/null +++ b/assets/static/bootstrap-icons/octagon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/octagon-half.svg b/assets/static/bootstrap-icons/octagon-half.svg new file mode 100644 index 0000000..fe6eb41 --- /dev/null +++ b/assets/static/bootstrap-icons/octagon-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/octagon.svg b/assets/static/bootstrap-icons/octagon.svg new file mode 100644 index 0000000..d2d9c5c --- /dev/null +++ b/assets/static/bootstrap-icons/octagon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/opencollective.svg b/assets/static/bootstrap-icons/opencollective.svg new file mode 100644 index 0000000..b9a0c9f --- /dev/null +++ b/assets/static/bootstrap-icons/opencollective.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/optical-audio-fill.svg b/assets/static/bootstrap-icons/optical-audio-fill.svg new file mode 100644 index 0000000..9b74060 --- /dev/null +++ b/assets/static/bootstrap-icons/optical-audio-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/optical-audio.svg b/assets/static/bootstrap-icons/optical-audio.svg new file mode 100644 index 0000000..253d1d7 --- /dev/null +++ b/assets/static/bootstrap-icons/optical-audio.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/option.svg b/assets/static/bootstrap-icons/option.svg new file mode 100644 index 0000000..32cce4c --- /dev/null +++ b/assets/static/bootstrap-icons/option.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/outlet.svg b/assets/static/bootstrap-icons/outlet.svg new file mode 100644 index 0000000..7787f35 --- /dev/null +++ b/assets/static/bootstrap-icons/outlet.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/p-circle-fill.svg b/assets/static/bootstrap-icons/p-circle-fill.svg new file mode 100644 index 0000000..e57d158 --- /dev/null +++ b/assets/static/bootstrap-icons/p-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/p-circle.svg b/assets/static/bootstrap-icons/p-circle.svg new file mode 100644 index 0000000..bfe68d9 --- /dev/null +++ b/assets/static/bootstrap-icons/p-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/p-square-fill.svg b/assets/static/bootstrap-icons/p-square-fill.svg new file mode 100644 index 0000000..164f5eb --- /dev/null +++ b/assets/static/bootstrap-icons/p-square-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/p-square.svg b/assets/static/bootstrap-icons/p-square.svg new file mode 100644 index 0000000..1f6335d --- /dev/null +++ b/assets/static/bootstrap-icons/p-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/paint-bucket.svg b/assets/static/bootstrap-icons/paint-bucket.svg new file mode 100644 index 0000000..9ac2df4 --- /dev/null +++ b/assets/static/bootstrap-icons/paint-bucket.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/palette-fill.svg b/assets/static/bootstrap-icons/palette-fill.svg new file mode 100644 index 0000000..d7a6a3b --- /dev/null +++ b/assets/static/bootstrap-icons/palette-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/palette.svg b/assets/static/bootstrap-icons/palette.svg new file mode 100644 index 0000000..1cd490f --- /dev/null +++ b/assets/static/bootstrap-icons/palette.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/palette2.svg b/assets/static/bootstrap-icons/palette2.svg new file mode 100644 index 0000000..ae65e88 --- /dev/null +++ b/assets/static/bootstrap-icons/palette2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/paperclip.svg b/assets/static/bootstrap-icons/paperclip.svg new file mode 100644 index 0000000..c02950b --- /dev/null +++ b/assets/static/bootstrap-icons/paperclip.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/paragraph.svg b/assets/static/bootstrap-icons/paragraph.svg new file mode 100644 index 0000000..38c65d4 --- /dev/null +++ b/assets/static/bootstrap-icons/paragraph.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pass-fill.svg b/assets/static/bootstrap-icons/pass-fill.svg new file mode 100644 index 0000000..1e15dd9 --- /dev/null +++ b/assets/static/bootstrap-icons/pass-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pass.svg b/assets/static/bootstrap-icons/pass.svg new file mode 100644 index 0000000..20a06bc --- /dev/null +++ b/assets/static/bootstrap-icons/pass.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/passport-fill.svg b/assets/static/bootstrap-icons/passport-fill.svg new file mode 100644 index 0000000..d42c1b9 --- /dev/null +++ b/assets/static/bootstrap-icons/passport-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/passport.svg b/assets/static/bootstrap-icons/passport.svg new file mode 100644 index 0000000..2ecee5a --- /dev/null +++ b/assets/static/bootstrap-icons/passport.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/patch-check-fill.svg b/assets/static/bootstrap-icons/patch-check-fill.svg new file mode 100644 index 0000000..91283e2 --- /dev/null +++ b/assets/static/bootstrap-icons/patch-check-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/patch-check.svg b/assets/static/bootstrap-icons/patch-check.svg new file mode 100644 index 0000000..1fd0a2e --- /dev/null +++ b/assets/static/bootstrap-icons/patch-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/patch-exclamation-fill.svg b/assets/static/bootstrap-icons/patch-exclamation-fill.svg new file mode 100644 index 0000000..e745268 --- /dev/null +++ b/assets/static/bootstrap-icons/patch-exclamation-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/patch-exclamation.svg b/assets/static/bootstrap-icons/patch-exclamation.svg new file mode 100644 index 0000000..2372cc6 --- /dev/null +++ b/assets/static/bootstrap-icons/patch-exclamation.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/patch-minus-fill.svg b/assets/static/bootstrap-icons/patch-minus-fill.svg new file mode 100644 index 0000000..bfeb96e --- /dev/null +++ b/assets/static/bootstrap-icons/patch-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/patch-minus.svg b/assets/static/bootstrap-icons/patch-minus.svg new file mode 100644 index 0000000..35a380c --- /dev/null +++ b/assets/static/bootstrap-icons/patch-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/patch-plus-fill.svg b/assets/static/bootstrap-icons/patch-plus-fill.svg new file mode 100644 index 0000000..b475098 --- /dev/null +++ b/assets/static/bootstrap-icons/patch-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/patch-plus.svg b/assets/static/bootstrap-icons/patch-plus.svg new file mode 100644 index 0000000..4f332da --- /dev/null +++ b/assets/static/bootstrap-icons/patch-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/patch-question-fill.svg b/assets/static/bootstrap-icons/patch-question-fill.svg new file mode 100644 index 0000000..101c255 --- /dev/null +++ b/assets/static/bootstrap-icons/patch-question-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/patch-question.svg b/assets/static/bootstrap-icons/patch-question.svg new file mode 100644 index 0000000..a777cef --- /dev/null +++ b/assets/static/bootstrap-icons/patch-question.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pause-btn-fill.svg b/assets/static/bootstrap-icons/pause-btn-fill.svg new file mode 100644 index 0000000..81c0720 --- /dev/null +++ b/assets/static/bootstrap-icons/pause-btn-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pause-btn.svg b/assets/static/bootstrap-icons/pause-btn.svg new file mode 100644 index 0000000..e2d68f9 --- /dev/null +++ b/assets/static/bootstrap-icons/pause-btn.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pause-circle-fill.svg b/assets/static/bootstrap-icons/pause-circle-fill.svg new file mode 100644 index 0000000..90c4ca5 --- /dev/null +++ b/assets/static/bootstrap-icons/pause-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pause-circle.svg b/assets/static/bootstrap-icons/pause-circle.svg new file mode 100644 index 0000000..6d3aeff --- /dev/null +++ b/assets/static/bootstrap-icons/pause-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pause-fill.svg b/assets/static/bootstrap-icons/pause-fill.svg new file mode 100644 index 0000000..92e1588 --- /dev/null +++ b/assets/static/bootstrap-icons/pause-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pause.svg b/assets/static/bootstrap-icons/pause.svg new file mode 100644 index 0000000..7bfde2c --- /dev/null +++ b/assets/static/bootstrap-icons/pause.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/paypal.svg b/assets/static/bootstrap-icons/paypal.svg new file mode 100644 index 0000000..b2cec88 --- /dev/null +++ b/assets/static/bootstrap-icons/paypal.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pc-display-horizontal.svg b/assets/static/bootstrap-icons/pc-display-horizontal.svg new file mode 100644 index 0000000..724ba86 --- /dev/null +++ b/assets/static/bootstrap-icons/pc-display-horizontal.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pc-display.svg b/assets/static/bootstrap-icons/pc-display.svg new file mode 100644 index 0000000..c3cf9dd --- /dev/null +++ b/assets/static/bootstrap-icons/pc-display.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pc-horizontal.svg b/assets/static/bootstrap-icons/pc-horizontal.svg new file mode 100644 index 0000000..a8ae72f --- /dev/null +++ b/assets/static/bootstrap-icons/pc-horizontal.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pc.svg b/assets/static/bootstrap-icons/pc.svg new file mode 100644 index 0000000..a8c023a --- /dev/null +++ b/assets/static/bootstrap-icons/pc.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pci-card-network.svg b/assets/static/bootstrap-icons/pci-card-network.svg new file mode 100644 index 0000000..a2b4359 --- /dev/null +++ b/assets/static/bootstrap-icons/pci-card-network.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pci-card-sound.svg b/assets/static/bootstrap-icons/pci-card-sound.svg new file mode 100644 index 0000000..2bb98f2 --- /dev/null +++ b/assets/static/bootstrap-icons/pci-card-sound.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pci-card.svg b/assets/static/bootstrap-icons/pci-card.svg new file mode 100644 index 0000000..66ff052 --- /dev/null +++ b/assets/static/bootstrap-icons/pci-card.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/peace-fill.svg b/assets/static/bootstrap-icons/peace-fill.svg new file mode 100644 index 0000000..a93e64d --- /dev/null +++ b/assets/static/bootstrap-icons/peace-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/peace.svg b/assets/static/bootstrap-icons/peace.svg new file mode 100644 index 0000000..22367e0 --- /dev/null +++ b/assets/static/bootstrap-icons/peace.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pen-fill.svg b/assets/static/bootstrap-icons/pen-fill.svg new file mode 100644 index 0000000..59bbb2e --- /dev/null +++ b/assets/static/bootstrap-icons/pen-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pen.svg b/assets/static/bootstrap-icons/pen.svg new file mode 100644 index 0000000..a63b250 --- /dev/null +++ b/assets/static/bootstrap-icons/pen.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pencil-fill.svg b/assets/static/bootstrap-icons/pencil-fill.svg new file mode 100644 index 0000000..4b3bdd7 --- /dev/null +++ b/assets/static/bootstrap-icons/pencil-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pencil-square.svg b/assets/static/bootstrap-icons/pencil-square.svg new file mode 100644 index 0000000..95c0529 --- /dev/null +++ b/assets/static/bootstrap-icons/pencil-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pencil.svg b/assets/static/bootstrap-icons/pencil.svg new file mode 100644 index 0000000..0b84e36 --- /dev/null +++ b/assets/static/bootstrap-icons/pencil.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pentagon-fill.svg b/assets/static/bootstrap-icons/pentagon-fill.svg new file mode 100644 index 0000000..9c80789 --- /dev/null +++ b/assets/static/bootstrap-icons/pentagon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pentagon-half.svg b/assets/static/bootstrap-icons/pentagon-half.svg new file mode 100644 index 0000000..6811a93 --- /dev/null +++ b/assets/static/bootstrap-icons/pentagon-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pentagon.svg b/assets/static/bootstrap-icons/pentagon.svg new file mode 100644 index 0000000..b6f5fe3 --- /dev/null +++ b/assets/static/bootstrap-icons/pentagon.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/people-fill.svg b/assets/static/bootstrap-icons/people-fill.svg new file mode 100644 index 0000000..2b9f768 --- /dev/null +++ b/assets/static/bootstrap-icons/people-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/people.svg b/assets/static/bootstrap-icons/people.svg new file mode 100644 index 0000000..341861a --- /dev/null +++ b/assets/static/bootstrap-icons/people.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/percent.svg b/assets/static/bootstrap-icons/percent.svg new file mode 100644 index 0000000..c0fd22d --- /dev/null +++ b/assets/static/bootstrap-icons/percent.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-add.svg b/assets/static/bootstrap-icons/person-add.svg new file mode 100644 index 0000000..66e2508 --- /dev/null +++ b/assets/static/bootstrap-icons/person-add.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-arms-up.svg b/assets/static/bootstrap-icons/person-arms-up.svg new file mode 100644 index 0000000..deb50e8 --- /dev/null +++ b/assets/static/bootstrap-icons/person-arms-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-badge-fill.svg b/assets/static/bootstrap-icons/person-badge-fill.svg new file mode 100644 index 0000000..7110ed3 --- /dev/null +++ b/assets/static/bootstrap-icons/person-badge-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-badge.svg b/assets/static/bootstrap-icons/person-badge.svg new file mode 100644 index 0000000..680aee1 --- /dev/null +++ b/assets/static/bootstrap-icons/person-badge.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-bounding-box.svg b/assets/static/bootstrap-icons/person-bounding-box.svg new file mode 100644 index 0000000..d9be675 --- /dev/null +++ b/assets/static/bootstrap-icons/person-bounding-box.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-check-fill.svg b/assets/static/bootstrap-icons/person-check-fill.svg new file mode 100644 index 0000000..04b95d3 --- /dev/null +++ b/assets/static/bootstrap-icons/person-check-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-check.svg b/assets/static/bootstrap-icons/person-check.svg new file mode 100644 index 0000000..39b4219 --- /dev/null +++ b/assets/static/bootstrap-icons/person-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-circle.svg b/assets/static/bootstrap-icons/person-circle.svg new file mode 100644 index 0000000..a75f25f --- /dev/null +++ b/assets/static/bootstrap-icons/person-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-dash-fill.svg b/assets/static/bootstrap-icons/person-dash-fill.svg new file mode 100644 index 0000000..9879e6e --- /dev/null +++ b/assets/static/bootstrap-icons/person-dash-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-dash.svg b/assets/static/bootstrap-icons/person-dash.svg new file mode 100644 index 0000000..b61190b --- /dev/null +++ b/assets/static/bootstrap-icons/person-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-down.svg b/assets/static/bootstrap-icons/person-down.svg new file mode 100644 index 0000000..79cf29a --- /dev/null +++ b/assets/static/bootstrap-icons/person-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-exclamation.svg b/assets/static/bootstrap-icons/person-exclamation.svg new file mode 100644 index 0000000..46fb506 --- /dev/null +++ b/assets/static/bootstrap-icons/person-exclamation.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-fill-add.svg b/assets/static/bootstrap-icons/person-fill-add.svg new file mode 100644 index 0000000..d6d15f9 --- /dev/null +++ b/assets/static/bootstrap-icons/person-fill-add.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-fill-check.svg b/assets/static/bootstrap-icons/person-fill-check.svg new file mode 100644 index 0000000..19b88a4 --- /dev/null +++ b/assets/static/bootstrap-icons/person-fill-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-fill-dash.svg b/assets/static/bootstrap-icons/person-fill-dash.svg new file mode 100644 index 0000000..24c2944 --- /dev/null +++ b/assets/static/bootstrap-icons/person-fill-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-fill-down.svg b/assets/static/bootstrap-icons/person-fill-down.svg new file mode 100644 index 0000000..714ae50 --- /dev/null +++ b/assets/static/bootstrap-icons/person-fill-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-fill-exclamation.svg b/assets/static/bootstrap-icons/person-fill-exclamation.svg new file mode 100644 index 0000000..5c3b7f5 --- /dev/null +++ b/assets/static/bootstrap-icons/person-fill-exclamation.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-fill-gear.svg b/assets/static/bootstrap-icons/person-fill-gear.svg new file mode 100644 index 0000000..33b120a --- /dev/null +++ b/assets/static/bootstrap-icons/person-fill-gear.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-fill-lock.svg b/assets/static/bootstrap-icons/person-fill-lock.svg new file mode 100644 index 0000000..adbccff --- /dev/null +++ b/assets/static/bootstrap-icons/person-fill-lock.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-fill-slash.svg b/assets/static/bootstrap-icons/person-fill-slash.svg new file mode 100644 index 0000000..398d563 --- /dev/null +++ b/assets/static/bootstrap-icons/person-fill-slash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-fill-up.svg b/assets/static/bootstrap-icons/person-fill-up.svg new file mode 100644 index 0000000..1edd97b --- /dev/null +++ b/assets/static/bootstrap-icons/person-fill-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-fill-x.svg b/assets/static/bootstrap-icons/person-fill-x.svg new file mode 100644 index 0000000..e3a66ed --- /dev/null +++ b/assets/static/bootstrap-icons/person-fill-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-fill.svg b/assets/static/bootstrap-icons/person-fill.svg new file mode 100644 index 0000000..46d1a75 --- /dev/null +++ b/assets/static/bootstrap-icons/person-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-gear.svg b/assets/static/bootstrap-icons/person-gear.svg new file mode 100644 index 0000000..93ec4da --- /dev/null +++ b/assets/static/bootstrap-icons/person-gear.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-heart.svg b/assets/static/bootstrap-icons/person-heart.svg new file mode 100644 index 0000000..51b236e --- /dev/null +++ b/assets/static/bootstrap-icons/person-heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-hearts.svg b/assets/static/bootstrap-icons/person-hearts.svg new file mode 100644 index 0000000..70bb2e0 --- /dev/null +++ b/assets/static/bootstrap-icons/person-hearts.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-lines-fill.svg b/assets/static/bootstrap-icons/person-lines-fill.svg new file mode 100644 index 0000000..cbe6c68 --- /dev/null +++ b/assets/static/bootstrap-icons/person-lines-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-lock.svg b/assets/static/bootstrap-icons/person-lock.svg new file mode 100644 index 0000000..d3672cd --- /dev/null +++ b/assets/static/bootstrap-icons/person-lock.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-plus-fill.svg b/assets/static/bootstrap-icons/person-plus-fill.svg new file mode 100644 index 0000000..6c92aea --- /dev/null +++ b/assets/static/bootstrap-icons/person-plus-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-plus.svg b/assets/static/bootstrap-icons/person-plus.svg new file mode 100644 index 0000000..4b88424 --- /dev/null +++ b/assets/static/bootstrap-icons/person-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-raised-hand.svg b/assets/static/bootstrap-icons/person-raised-hand.svg new file mode 100644 index 0000000..00ac301 --- /dev/null +++ b/assets/static/bootstrap-icons/person-raised-hand.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-rolodex.svg b/assets/static/bootstrap-icons/person-rolodex.svg new file mode 100644 index 0000000..2039494 --- /dev/null +++ b/assets/static/bootstrap-icons/person-rolodex.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-slash.svg b/assets/static/bootstrap-icons/person-slash.svg new file mode 100644 index 0000000..ab53647 --- /dev/null +++ b/assets/static/bootstrap-icons/person-slash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-square.svg b/assets/static/bootstrap-icons/person-square.svg new file mode 100644 index 0000000..12a33c5 --- /dev/null +++ b/assets/static/bootstrap-icons/person-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-standing-dress.svg b/assets/static/bootstrap-icons/person-standing-dress.svg new file mode 100644 index 0000000..4448606 --- /dev/null +++ b/assets/static/bootstrap-icons/person-standing-dress.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-standing.svg b/assets/static/bootstrap-icons/person-standing.svg new file mode 100644 index 0000000..ccd7b35 --- /dev/null +++ b/assets/static/bootstrap-icons/person-standing.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-up.svg b/assets/static/bootstrap-icons/person-up.svg new file mode 100644 index 0000000..93a430a --- /dev/null +++ b/assets/static/bootstrap-icons/person-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-vcard-fill.svg b/assets/static/bootstrap-icons/person-vcard-fill.svg new file mode 100644 index 0000000..9efb1b8 --- /dev/null +++ b/assets/static/bootstrap-icons/person-vcard-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-vcard.svg b/assets/static/bootstrap-icons/person-vcard.svg new file mode 100644 index 0000000..40ec41e --- /dev/null +++ b/assets/static/bootstrap-icons/person-vcard.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-video.svg b/assets/static/bootstrap-icons/person-video.svg new file mode 100644 index 0000000..a991759 --- /dev/null +++ b/assets/static/bootstrap-icons/person-video.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-video2.svg b/assets/static/bootstrap-icons/person-video2.svg new file mode 100644 index 0000000..80b3b8a --- /dev/null +++ b/assets/static/bootstrap-icons/person-video2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-video3.svg b/assets/static/bootstrap-icons/person-video3.svg new file mode 100644 index 0000000..472d998 --- /dev/null +++ b/assets/static/bootstrap-icons/person-video3.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-walking.svg b/assets/static/bootstrap-icons/person-walking.svg new file mode 100644 index 0000000..16cc0b4 --- /dev/null +++ b/assets/static/bootstrap-icons/person-walking.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-wheelchair.svg b/assets/static/bootstrap-icons/person-wheelchair.svg new file mode 100644 index 0000000..416cad2 --- /dev/null +++ b/assets/static/bootstrap-icons/person-wheelchair.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-workspace.svg b/assets/static/bootstrap-icons/person-workspace.svg new file mode 100644 index 0000000..0b3cdce --- /dev/null +++ b/assets/static/bootstrap-icons/person-workspace.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-x-fill.svg b/assets/static/bootstrap-icons/person-x-fill.svg new file mode 100644 index 0000000..9e31903 --- /dev/null +++ b/assets/static/bootstrap-icons/person-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person-x.svg b/assets/static/bootstrap-icons/person-x.svg new file mode 100644 index 0000000..7514c59 --- /dev/null +++ b/assets/static/bootstrap-icons/person-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/person.svg b/assets/static/bootstrap-icons/person.svg new file mode 100644 index 0000000..98ea060 --- /dev/null +++ b/assets/static/bootstrap-icons/person.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/phone-fill.svg b/assets/static/bootstrap-icons/phone-fill.svg new file mode 100644 index 0000000..f25bd51 --- /dev/null +++ b/assets/static/bootstrap-icons/phone-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/phone-flip.svg b/assets/static/bootstrap-icons/phone-flip.svg new file mode 100644 index 0000000..3ae28d3 --- /dev/null +++ b/assets/static/bootstrap-icons/phone-flip.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/phone-landscape-fill.svg b/assets/static/bootstrap-icons/phone-landscape-fill.svg new file mode 100644 index 0000000..669bf6e --- /dev/null +++ b/assets/static/bootstrap-icons/phone-landscape-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/phone-landscape.svg b/assets/static/bootstrap-icons/phone-landscape.svg new file mode 100644 index 0000000..4c30ef2 --- /dev/null +++ b/assets/static/bootstrap-icons/phone-landscape.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/phone-vibrate-fill.svg b/assets/static/bootstrap-icons/phone-vibrate-fill.svg new file mode 100644 index 0000000..dc35ca0 --- /dev/null +++ b/assets/static/bootstrap-icons/phone-vibrate-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/phone-vibrate.svg b/assets/static/bootstrap-icons/phone-vibrate.svg new file mode 100644 index 0000000..58acbf6 --- /dev/null +++ b/assets/static/bootstrap-icons/phone-vibrate.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/phone.svg b/assets/static/bootstrap-icons/phone.svg new file mode 100644 index 0000000..4839331 --- /dev/null +++ b/assets/static/bootstrap-icons/phone.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pie-chart-fill.svg b/assets/static/bootstrap-icons/pie-chart-fill.svg new file mode 100644 index 0000000..f667aea --- /dev/null +++ b/assets/static/bootstrap-icons/pie-chart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pie-chart.svg b/assets/static/bootstrap-icons/pie-chart.svg new file mode 100644 index 0000000..b49251b --- /dev/null +++ b/assets/static/bootstrap-icons/pie-chart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/piggy-bank-fill.svg b/assets/static/bootstrap-icons/piggy-bank-fill.svg new file mode 100644 index 0000000..592b31d --- /dev/null +++ b/assets/static/bootstrap-icons/piggy-bank-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/piggy-bank.svg b/assets/static/bootstrap-icons/piggy-bank.svg new file mode 100644 index 0000000..86e33eb --- /dev/null +++ b/assets/static/bootstrap-icons/piggy-bank.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pin-angle-fill.svg b/assets/static/bootstrap-icons/pin-angle-fill.svg new file mode 100644 index 0000000..bc3078c --- /dev/null +++ b/assets/static/bootstrap-icons/pin-angle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pin-angle.svg b/assets/static/bootstrap-icons/pin-angle.svg new file mode 100644 index 0000000..ecc4d16 --- /dev/null +++ b/assets/static/bootstrap-icons/pin-angle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pin-fill.svg b/assets/static/bootstrap-icons/pin-fill.svg new file mode 100644 index 0000000..f345059 --- /dev/null +++ b/assets/static/bootstrap-icons/pin-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pin-map-fill.svg b/assets/static/bootstrap-icons/pin-map-fill.svg new file mode 100644 index 0000000..9db0d29 --- /dev/null +++ b/assets/static/bootstrap-icons/pin-map-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pin-map.svg b/assets/static/bootstrap-icons/pin-map.svg new file mode 100644 index 0000000..0462a5a --- /dev/null +++ b/assets/static/bootstrap-icons/pin-map.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pin.svg b/assets/static/bootstrap-icons/pin.svg new file mode 100644 index 0000000..4655620 --- /dev/null +++ b/assets/static/bootstrap-icons/pin.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pinterest.svg b/assets/static/bootstrap-icons/pinterest.svg new file mode 100644 index 0000000..5c850b6 --- /dev/null +++ b/assets/static/bootstrap-icons/pinterest.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pip-fill.svg b/assets/static/bootstrap-icons/pip-fill.svg new file mode 100644 index 0000000..4865244 --- /dev/null +++ b/assets/static/bootstrap-icons/pip-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/pip.svg b/assets/static/bootstrap-icons/pip.svg new file mode 100644 index 0000000..458c9c9 --- /dev/null +++ b/assets/static/bootstrap-icons/pip.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/play-btn-fill.svg b/assets/static/bootstrap-icons/play-btn-fill.svg new file mode 100644 index 0000000..3d0d1c3 --- /dev/null +++ b/assets/static/bootstrap-icons/play-btn-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/play-btn.svg b/assets/static/bootstrap-icons/play-btn.svg new file mode 100644 index 0000000..2fcbc5e --- /dev/null +++ b/assets/static/bootstrap-icons/play-btn.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/play-circle-fill.svg b/assets/static/bootstrap-icons/play-circle-fill.svg new file mode 100644 index 0000000..93eeb93 --- /dev/null +++ b/assets/static/bootstrap-icons/play-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/play-circle.svg b/assets/static/bootstrap-icons/play-circle.svg new file mode 100644 index 0000000..a1d742e --- /dev/null +++ b/assets/static/bootstrap-icons/play-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/play-fill.svg b/assets/static/bootstrap-icons/play-fill.svg new file mode 100644 index 0000000..e538083 --- /dev/null +++ b/assets/static/bootstrap-icons/play-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/play.svg b/assets/static/bootstrap-icons/play.svg new file mode 100644 index 0000000..98954e7 --- /dev/null +++ b/assets/static/bootstrap-icons/play.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/playstation.svg b/assets/static/bootstrap-icons/playstation.svg new file mode 100644 index 0000000..3275d59 --- /dev/null +++ b/assets/static/bootstrap-icons/playstation.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/plug-fill.svg b/assets/static/bootstrap-icons/plug-fill.svg new file mode 100644 index 0000000..99858eb --- /dev/null +++ b/assets/static/bootstrap-icons/plug-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/plug.svg b/assets/static/bootstrap-icons/plug.svg new file mode 100644 index 0000000..9d6a85b --- /dev/null +++ b/assets/static/bootstrap-icons/plug.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/plugin.svg b/assets/static/bootstrap-icons/plugin.svg new file mode 100644 index 0000000..92e99d4 --- /dev/null +++ b/assets/static/bootstrap-icons/plugin.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/plus-circle-dotted.svg b/assets/static/bootstrap-icons/plus-circle-dotted.svg new file mode 100644 index 0000000..2a20e2d --- /dev/null +++ b/assets/static/bootstrap-icons/plus-circle-dotted.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/plus-circle-fill.svg b/assets/static/bootstrap-icons/plus-circle-fill.svg new file mode 100644 index 0000000..d1ec2d0 --- /dev/null +++ b/assets/static/bootstrap-icons/plus-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/plus-circle.svg b/assets/static/bootstrap-icons/plus-circle.svg new file mode 100644 index 0000000..2832373 --- /dev/null +++ b/assets/static/bootstrap-icons/plus-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/plus-lg.svg b/assets/static/bootstrap-icons/plus-lg.svg new file mode 100644 index 0000000..531e86c --- /dev/null +++ b/assets/static/bootstrap-icons/plus-lg.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/plus-slash-minus.svg b/assets/static/bootstrap-icons/plus-slash-minus.svg new file mode 100644 index 0000000..e0fee7d --- /dev/null +++ b/assets/static/bootstrap-icons/plus-slash-minus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/plus-square-dotted.svg b/assets/static/bootstrap-icons/plus-square-dotted.svg new file mode 100644 index 0000000..e230a08 --- /dev/null +++ b/assets/static/bootstrap-icons/plus-square-dotted.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/plus-square-fill.svg b/assets/static/bootstrap-icons/plus-square-fill.svg new file mode 100644 index 0000000..1dddd13 --- /dev/null +++ b/assets/static/bootstrap-icons/plus-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/plus-square.svg b/assets/static/bootstrap-icons/plus-square.svg new file mode 100644 index 0000000..ef11b48 --- /dev/null +++ b/assets/static/bootstrap-icons/plus-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/plus.svg b/assets/static/bootstrap-icons/plus.svg new file mode 100644 index 0000000..9012271 --- /dev/null +++ b/assets/static/bootstrap-icons/plus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/postage-fill.svg b/assets/static/bootstrap-icons/postage-fill.svg new file mode 100644 index 0000000..861a3a1 --- /dev/null +++ b/assets/static/bootstrap-icons/postage-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/postage-heart-fill.svg b/assets/static/bootstrap-icons/postage-heart-fill.svg new file mode 100644 index 0000000..4737a4d --- /dev/null +++ b/assets/static/bootstrap-icons/postage-heart-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/postage-heart.svg b/assets/static/bootstrap-icons/postage-heart.svg new file mode 100644 index 0000000..aa35a6c --- /dev/null +++ b/assets/static/bootstrap-icons/postage-heart.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/postage.svg b/assets/static/bootstrap-icons/postage.svg new file mode 100644 index 0000000..54dcfa6 --- /dev/null +++ b/assets/static/bootstrap-icons/postage.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/postcard-fill.svg b/assets/static/bootstrap-icons/postcard-fill.svg new file mode 100644 index 0000000..aeba518 --- /dev/null +++ b/assets/static/bootstrap-icons/postcard-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/postcard-heart-fill.svg b/assets/static/bootstrap-icons/postcard-heart-fill.svg new file mode 100644 index 0000000..1e371b8 --- /dev/null +++ b/assets/static/bootstrap-icons/postcard-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/postcard-heart.svg b/assets/static/bootstrap-icons/postcard-heart.svg new file mode 100644 index 0000000..52c0053 --- /dev/null +++ b/assets/static/bootstrap-icons/postcard-heart.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/postcard.svg b/assets/static/bootstrap-icons/postcard.svg new file mode 100644 index 0000000..43ba40b --- /dev/null +++ b/assets/static/bootstrap-icons/postcard.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/power.svg b/assets/static/bootstrap-icons/power.svg new file mode 100644 index 0000000..937b842 --- /dev/null +++ b/assets/static/bootstrap-icons/power.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/prescription.svg b/assets/static/bootstrap-icons/prescription.svg new file mode 100644 index 0000000..b895b2b --- /dev/null +++ b/assets/static/bootstrap-icons/prescription.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/prescription2.svg b/assets/static/bootstrap-icons/prescription2.svg new file mode 100644 index 0000000..cb278b0 --- /dev/null +++ b/assets/static/bootstrap-icons/prescription2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/printer-fill.svg b/assets/static/bootstrap-icons/printer-fill.svg new file mode 100644 index 0000000..43cee36 --- /dev/null +++ b/assets/static/bootstrap-icons/printer-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/printer.svg b/assets/static/bootstrap-icons/printer.svg new file mode 100644 index 0000000..0886a57 --- /dev/null +++ b/assets/static/bootstrap-icons/printer.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/projector-fill.svg b/assets/static/bootstrap-icons/projector-fill.svg new file mode 100644 index 0000000..046166c --- /dev/null +++ b/assets/static/bootstrap-icons/projector-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/projector.svg b/assets/static/bootstrap-icons/projector.svg new file mode 100644 index 0000000..77e68b0 --- /dev/null +++ b/assets/static/bootstrap-icons/projector.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/puzzle-fill.svg b/assets/static/bootstrap-icons/puzzle-fill.svg new file mode 100644 index 0000000..92c4ea0 --- /dev/null +++ b/assets/static/bootstrap-icons/puzzle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/puzzle.svg b/assets/static/bootstrap-icons/puzzle.svg new file mode 100644 index 0000000..44903f7 --- /dev/null +++ b/assets/static/bootstrap-icons/puzzle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/qr-code-scan.svg b/assets/static/bootstrap-icons/qr-code-scan.svg new file mode 100644 index 0000000..3c53387 --- /dev/null +++ b/assets/static/bootstrap-icons/qr-code-scan.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/qr-code.svg b/assets/static/bootstrap-icons/qr-code.svg new file mode 100644 index 0000000..e09157a --- /dev/null +++ b/assets/static/bootstrap-icons/qr-code.svg @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/question-circle-fill.svg b/assets/static/bootstrap-icons/question-circle-fill.svg new file mode 100644 index 0000000..8b2a2c0 --- /dev/null +++ b/assets/static/bootstrap-icons/question-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/question-circle.svg b/assets/static/bootstrap-icons/question-circle.svg new file mode 100644 index 0000000..283e653 --- /dev/null +++ b/assets/static/bootstrap-icons/question-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/question-diamond-fill.svg b/assets/static/bootstrap-icons/question-diamond-fill.svg new file mode 100644 index 0000000..6bf3512 --- /dev/null +++ b/assets/static/bootstrap-icons/question-diamond-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/question-diamond.svg b/assets/static/bootstrap-icons/question-diamond.svg new file mode 100644 index 0000000..a777b47 --- /dev/null +++ b/assets/static/bootstrap-icons/question-diamond.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/question-lg.svg b/assets/static/bootstrap-icons/question-lg.svg new file mode 100644 index 0000000..756ea0f --- /dev/null +++ b/assets/static/bootstrap-icons/question-lg.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/question-octagon-fill.svg b/assets/static/bootstrap-icons/question-octagon-fill.svg new file mode 100644 index 0000000..c0c43ef --- /dev/null +++ b/assets/static/bootstrap-icons/question-octagon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/question-octagon.svg b/assets/static/bootstrap-icons/question-octagon.svg new file mode 100644 index 0000000..5116862 --- /dev/null +++ b/assets/static/bootstrap-icons/question-octagon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/question-square-fill.svg b/assets/static/bootstrap-icons/question-square-fill.svg new file mode 100644 index 0000000..a266f9f --- /dev/null +++ b/assets/static/bootstrap-icons/question-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/question-square.svg b/assets/static/bootstrap-icons/question-square.svg new file mode 100644 index 0000000..ad44a20 --- /dev/null +++ b/assets/static/bootstrap-icons/question-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/question.svg b/assets/static/bootstrap-icons/question.svg new file mode 100644 index 0000000..ba185ad --- /dev/null +++ b/assets/static/bootstrap-icons/question.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/quora.svg b/assets/static/bootstrap-icons/quora.svg new file mode 100644 index 0000000..85ca1bd --- /dev/null +++ b/assets/static/bootstrap-icons/quora.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/quote.svg b/assets/static/bootstrap-icons/quote.svg new file mode 100644 index 0000000..0aa0e17 --- /dev/null +++ b/assets/static/bootstrap-icons/quote.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/r-circle-fill.svg b/assets/static/bootstrap-icons/r-circle-fill.svg new file mode 100644 index 0000000..810423e --- /dev/null +++ b/assets/static/bootstrap-icons/r-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/r-circle.svg b/assets/static/bootstrap-icons/r-circle.svg new file mode 100644 index 0000000..bf2d8d6 --- /dev/null +++ b/assets/static/bootstrap-icons/r-circle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/r-square-fill.svg b/assets/static/bootstrap-icons/r-square-fill.svg new file mode 100644 index 0000000..b1151f3 --- /dev/null +++ b/assets/static/bootstrap-icons/r-square-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/r-square.svg b/assets/static/bootstrap-icons/r-square.svg new file mode 100644 index 0000000..e19e688 --- /dev/null +++ b/assets/static/bootstrap-icons/r-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/radar.svg b/assets/static/bootstrap-icons/radar.svg new file mode 100644 index 0000000..024f3fd --- /dev/null +++ b/assets/static/bootstrap-icons/radar.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/radioactive.svg b/assets/static/bootstrap-icons/radioactive.svg new file mode 100644 index 0000000..3eaaa56 --- /dev/null +++ b/assets/static/bootstrap-icons/radioactive.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/rainbow.svg b/assets/static/bootstrap-icons/rainbow.svg new file mode 100644 index 0000000..e864abf --- /dev/null +++ b/assets/static/bootstrap-icons/rainbow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/receipt-cutoff.svg b/assets/static/bootstrap-icons/receipt-cutoff.svg new file mode 100644 index 0000000..21c3bc8 --- /dev/null +++ b/assets/static/bootstrap-icons/receipt-cutoff.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/receipt.svg b/assets/static/bootstrap-icons/receipt.svg new file mode 100644 index 0000000..ab29fe6 --- /dev/null +++ b/assets/static/bootstrap-icons/receipt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/reception-0.svg b/assets/static/bootstrap-icons/reception-0.svg new file mode 100644 index 0000000..a7c7872 --- /dev/null +++ b/assets/static/bootstrap-icons/reception-0.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/reception-1.svg b/assets/static/bootstrap-icons/reception-1.svg new file mode 100644 index 0000000..4081ceb --- /dev/null +++ b/assets/static/bootstrap-icons/reception-1.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/reception-2.svg b/assets/static/bootstrap-icons/reception-2.svg new file mode 100644 index 0000000..7e1acc5 --- /dev/null +++ b/assets/static/bootstrap-icons/reception-2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/reception-3.svg b/assets/static/bootstrap-icons/reception-3.svg new file mode 100644 index 0000000..e9ea476 --- /dev/null +++ b/assets/static/bootstrap-icons/reception-3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/reception-4.svg b/assets/static/bootstrap-icons/reception-4.svg new file mode 100644 index 0000000..7791e4b --- /dev/null +++ b/assets/static/bootstrap-icons/reception-4.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/record-btn-fill.svg b/assets/static/bootstrap-icons/record-btn-fill.svg new file mode 100644 index 0000000..83ee303 --- /dev/null +++ b/assets/static/bootstrap-icons/record-btn-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/record-btn.svg b/assets/static/bootstrap-icons/record-btn.svg new file mode 100644 index 0000000..7ba84ce --- /dev/null +++ b/assets/static/bootstrap-icons/record-btn.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/record-circle-fill.svg b/assets/static/bootstrap-icons/record-circle-fill.svg new file mode 100644 index 0000000..0db59d1 --- /dev/null +++ b/assets/static/bootstrap-icons/record-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/record-circle.svg b/assets/static/bootstrap-icons/record-circle.svg new file mode 100644 index 0000000..5dad17b --- /dev/null +++ b/assets/static/bootstrap-icons/record-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/record-fill.svg b/assets/static/bootstrap-icons/record-fill.svg new file mode 100644 index 0000000..ef31df0 --- /dev/null +++ b/assets/static/bootstrap-icons/record-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/record.svg b/assets/static/bootstrap-icons/record.svg new file mode 100644 index 0000000..5ec840c --- /dev/null +++ b/assets/static/bootstrap-icons/record.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/record2-fill.svg b/assets/static/bootstrap-icons/record2-fill.svg new file mode 100644 index 0000000..8ad4fe3 --- /dev/null +++ b/assets/static/bootstrap-icons/record2-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/record2.svg b/assets/static/bootstrap-icons/record2.svg new file mode 100644 index 0000000..3b5c5ca --- /dev/null +++ b/assets/static/bootstrap-icons/record2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/recycle.svg b/assets/static/bootstrap-icons/recycle.svg new file mode 100644 index 0000000..21d1bd9 --- /dev/null +++ b/assets/static/bootstrap-icons/recycle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/reddit.svg b/assets/static/bootstrap-icons/reddit.svg new file mode 100644 index 0000000..777aead --- /dev/null +++ b/assets/static/bootstrap-icons/reddit.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/regex.svg b/assets/static/bootstrap-icons/regex.svg new file mode 100644 index 0000000..ec8bf00 --- /dev/null +++ b/assets/static/bootstrap-icons/regex.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/repeat-1.svg b/assets/static/bootstrap-icons/repeat-1.svg new file mode 100644 index 0000000..9357fcf --- /dev/null +++ b/assets/static/bootstrap-icons/repeat-1.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/repeat.svg b/assets/static/bootstrap-icons/repeat.svg new file mode 100644 index 0000000..51765c9 --- /dev/null +++ b/assets/static/bootstrap-icons/repeat.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/reply-all-fill.svg b/assets/static/bootstrap-icons/reply-all-fill.svg new file mode 100644 index 0000000..95e18a2 --- /dev/null +++ b/assets/static/bootstrap-icons/reply-all-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/reply-all.svg b/assets/static/bootstrap-icons/reply-all.svg new file mode 100644 index 0000000..decad51 --- /dev/null +++ b/assets/static/bootstrap-icons/reply-all.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/reply-fill.svg b/assets/static/bootstrap-icons/reply-fill.svg new file mode 100644 index 0000000..82358b1 --- /dev/null +++ b/assets/static/bootstrap-icons/reply-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/reply.svg b/assets/static/bootstrap-icons/reply.svg new file mode 100644 index 0000000..5bb432e --- /dev/null +++ b/assets/static/bootstrap-icons/reply.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/rewind-btn-fill.svg b/assets/static/bootstrap-icons/rewind-btn-fill.svg new file mode 100644 index 0000000..8ea4155 --- /dev/null +++ b/assets/static/bootstrap-icons/rewind-btn-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/rewind-btn.svg b/assets/static/bootstrap-icons/rewind-btn.svg new file mode 100644 index 0000000..47bd717 --- /dev/null +++ b/assets/static/bootstrap-icons/rewind-btn.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/rewind-circle-fill.svg b/assets/static/bootstrap-icons/rewind-circle-fill.svg new file mode 100644 index 0000000..b972044 --- /dev/null +++ b/assets/static/bootstrap-icons/rewind-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/rewind-circle.svg b/assets/static/bootstrap-icons/rewind-circle.svg new file mode 100644 index 0000000..4952147 --- /dev/null +++ b/assets/static/bootstrap-icons/rewind-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/rewind-fill.svg b/assets/static/bootstrap-icons/rewind-fill.svg new file mode 100644 index 0000000..5919f7e --- /dev/null +++ b/assets/static/bootstrap-icons/rewind-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/rewind.svg b/assets/static/bootstrap-icons/rewind.svg new file mode 100644 index 0000000..bc731e7 --- /dev/null +++ b/assets/static/bootstrap-icons/rewind.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/robot.svg b/assets/static/bootstrap-icons/robot.svg new file mode 100644 index 0000000..a224202 --- /dev/null +++ b/assets/static/bootstrap-icons/robot.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/rocket-fill.svg b/assets/static/bootstrap-icons/rocket-fill.svg new file mode 100644 index 0000000..f319029 --- /dev/null +++ b/assets/static/bootstrap-icons/rocket-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/rocket-takeoff-fill.svg b/assets/static/bootstrap-icons/rocket-takeoff-fill.svg new file mode 100644 index 0000000..707d205 --- /dev/null +++ b/assets/static/bootstrap-icons/rocket-takeoff-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/rocket-takeoff.svg b/assets/static/bootstrap-icons/rocket-takeoff.svg new file mode 100644 index 0000000..2abc6d4 --- /dev/null +++ b/assets/static/bootstrap-icons/rocket-takeoff.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/rocket.svg b/assets/static/bootstrap-icons/rocket.svg new file mode 100644 index 0000000..b760e1f --- /dev/null +++ b/assets/static/bootstrap-icons/rocket.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/router-fill.svg b/assets/static/bootstrap-icons/router-fill.svg new file mode 100644 index 0000000..74d1469 --- /dev/null +++ b/assets/static/bootstrap-icons/router-fill.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/router.svg b/assets/static/bootstrap-icons/router.svg new file mode 100644 index 0000000..62fac78 --- /dev/null +++ b/assets/static/bootstrap-icons/router.svg @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/rss-fill.svg b/assets/static/bootstrap-icons/rss-fill.svg new file mode 100644 index 0000000..50d7cfd --- /dev/null +++ b/assets/static/bootstrap-icons/rss-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/rss.svg b/assets/static/bootstrap-icons/rss.svg new file mode 100644 index 0000000..18dc9f1 --- /dev/null +++ b/assets/static/bootstrap-icons/rss.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/rulers.svg b/assets/static/bootstrap-icons/rulers.svg new file mode 100644 index 0000000..90fb01c --- /dev/null +++ b/assets/static/bootstrap-icons/rulers.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/safe-fill.svg b/assets/static/bootstrap-icons/safe-fill.svg new file mode 100644 index 0000000..6da7a7d --- /dev/null +++ b/assets/static/bootstrap-icons/safe-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/safe.svg b/assets/static/bootstrap-icons/safe.svg new file mode 100644 index 0000000..d6d24c2 --- /dev/null +++ b/assets/static/bootstrap-icons/safe.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/safe2-fill.svg b/assets/static/bootstrap-icons/safe2-fill.svg new file mode 100644 index 0000000..064e073 --- /dev/null +++ b/assets/static/bootstrap-icons/safe2-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/safe2.svg b/assets/static/bootstrap-icons/safe2.svg new file mode 100644 index 0000000..9c80f55 --- /dev/null +++ b/assets/static/bootstrap-icons/safe2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/save-fill.svg b/assets/static/bootstrap-icons/save-fill.svg new file mode 100644 index 0000000..1c42812 --- /dev/null +++ b/assets/static/bootstrap-icons/save-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/save.svg b/assets/static/bootstrap-icons/save.svg new file mode 100644 index 0000000..9dd7b2f --- /dev/null +++ b/assets/static/bootstrap-icons/save.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/save2-fill.svg b/assets/static/bootstrap-icons/save2-fill.svg new file mode 100644 index 0000000..207f91b --- /dev/null +++ b/assets/static/bootstrap-icons/save2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/save2.svg b/assets/static/bootstrap-icons/save2.svg new file mode 100644 index 0000000..988c4f1 --- /dev/null +++ b/assets/static/bootstrap-icons/save2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/scissors.svg b/assets/static/bootstrap-icons/scissors.svg new file mode 100644 index 0000000..2f566e4 --- /dev/null +++ b/assets/static/bootstrap-icons/scissors.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/scooter.svg b/assets/static/bootstrap-icons/scooter.svg new file mode 100644 index 0000000..8828452 --- /dev/null +++ b/assets/static/bootstrap-icons/scooter.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/screwdriver.svg b/assets/static/bootstrap-icons/screwdriver.svg new file mode 100644 index 0000000..54d5a2c --- /dev/null +++ b/assets/static/bootstrap-icons/screwdriver.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sd-card-fill.svg b/assets/static/bootstrap-icons/sd-card-fill.svg new file mode 100644 index 0000000..655a96d --- /dev/null +++ b/assets/static/bootstrap-icons/sd-card-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sd-card.svg b/assets/static/bootstrap-icons/sd-card.svg new file mode 100644 index 0000000..564661a --- /dev/null +++ b/assets/static/bootstrap-icons/sd-card.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/search-heart-fill.svg b/assets/static/bootstrap-icons/search-heart-fill.svg new file mode 100644 index 0000000..c57bb48 --- /dev/null +++ b/assets/static/bootstrap-icons/search-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/search-heart.svg b/assets/static/bootstrap-icons/search-heart.svg new file mode 100644 index 0000000..d76bfe5 --- /dev/null +++ b/assets/static/bootstrap-icons/search-heart.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/search.svg b/assets/static/bootstrap-icons/search.svg new file mode 100644 index 0000000..3318054 --- /dev/null +++ b/assets/static/bootstrap-icons/search.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/segmented-nav.svg b/assets/static/bootstrap-icons/segmented-nav.svg new file mode 100644 index 0000000..b274b68 --- /dev/null +++ b/assets/static/bootstrap-icons/segmented-nav.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-arrow-down-fill.svg b/assets/static/bootstrap-icons/send-arrow-down-fill.svg new file mode 100644 index 0000000..6d43965 --- /dev/null +++ b/assets/static/bootstrap-icons/send-arrow-down-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-arrow-down.svg b/assets/static/bootstrap-icons/send-arrow-down.svg new file mode 100644 index 0000000..dcbae56 --- /dev/null +++ b/assets/static/bootstrap-icons/send-arrow-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-arrow-up-fill.svg b/assets/static/bootstrap-icons/send-arrow-up-fill.svg new file mode 100644 index 0000000..19abab7 --- /dev/null +++ b/assets/static/bootstrap-icons/send-arrow-up-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-arrow-up.svg b/assets/static/bootstrap-icons/send-arrow-up.svg new file mode 100644 index 0000000..a642dac --- /dev/null +++ b/assets/static/bootstrap-icons/send-arrow-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-check-fill.svg b/assets/static/bootstrap-icons/send-check-fill.svg new file mode 100644 index 0000000..c4259c8 --- /dev/null +++ b/assets/static/bootstrap-icons/send-check-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-check.svg b/assets/static/bootstrap-icons/send-check.svg new file mode 100644 index 0000000..5221868 --- /dev/null +++ b/assets/static/bootstrap-icons/send-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-dash-fill.svg b/assets/static/bootstrap-icons/send-dash-fill.svg new file mode 100644 index 0000000..12a82df --- /dev/null +++ b/assets/static/bootstrap-icons/send-dash-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-dash.svg b/assets/static/bootstrap-icons/send-dash.svg new file mode 100644 index 0000000..63fc38c --- /dev/null +++ b/assets/static/bootstrap-icons/send-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-exclamation-fill.svg b/assets/static/bootstrap-icons/send-exclamation-fill.svg new file mode 100644 index 0000000..fce810f --- /dev/null +++ b/assets/static/bootstrap-icons/send-exclamation-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-exclamation.svg b/assets/static/bootstrap-icons/send-exclamation.svg new file mode 100644 index 0000000..8a72f31 --- /dev/null +++ b/assets/static/bootstrap-icons/send-exclamation.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-fill.svg b/assets/static/bootstrap-icons/send-fill.svg new file mode 100644 index 0000000..6e95d27 --- /dev/null +++ b/assets/static/bootstrap-icons/send-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-plus-fill.svg b/assets/static/bootstrap-icons/send-plus-fill.svg new file mode 100644 index 0000000..63b0482 --- /dev/null +++ b/assets/static/bootstrap-icons/send-plus-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-plus.svg b/assets/static/bootstrap-icons/send-plus.svg new file mode 100644 index 0000000..350b388 --- /dev/null +++ b/assets/static/bootstrap-icons/send-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-slash-fill.svg b/assets/static/bootstrap-icons/send-slash-fill.svg new file mode 100644 index 0000000..e98aa92 --- /dev/null +++ b/assets/static/bootstrap-icons/send-slash-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-slash.svg b/assets/static/bootstrap-icons/send-slash.svg new file mode 100644 index 0000000..e434afe --- /dev/null +++ b/assets/static/bootstrap-icons/send-slash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-x-fill.svg b/assets/static/bootstrap-icons/send-x-fill.svg new file mode 100644 index 0000000..45a98a4 --- /dev/null +++ b/assets/static/bootstrap-icons/send-x-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send-x.svg b/assets/static/bootstrap-icons/send-x.svg new file mode 100644 index 0000000..5b854c2 --- /dev/null +++ b/assets/static/bootstrap-icons/send-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/send.svg b/assets/static/bootstrap-icons/send.svg new file mode 100644 index 0000000..8db355e --- /dev/null +++ b/assets/static/bootstrap-icons/send.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/server.svg b/assets/static/bootstrap-icons/server.svg new file mode 100644 index 0000000..bb8ca8f --- /dev/null +++ b/assets/static/bootstrap-icons/server.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shadows.svg b/assets/static/bootstrap-icons/shadows.svg new file mode 100644 index 0000000..6b09f0f --- /dev/null +++ b/assets/static/bootstrap-icons/shadows.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/share-fill.svg b/assets/static/bootstrap-icons/share-fill.svg new file mode 100644 index 0000000..bdc07ca --- /dev/null +++ b/assets/static/bootstrap-icons/share-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/share.svg b/assets/static/bootstrap-icons/share.svg new file mode 100644 index 0000000..bc62b93 --- /dev/null +++ b/assets/static/bootstrap-icons/share.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-check.svg b/assets/static/bootstrap-icons/shield-check.svg new file mode 100644 index 0000000..3908fca --- /dev/null +++ b/assets/static/bootstrap-icons/shield-check.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-exclamation.svg b/assets/static/bootstrap-icons/shield-exclamation.svg new file mode 100644 index 0000000..9826504 --- /dev/null +++ b/assets/static/bootstrap-icons/shield-exclamation.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-fill-check.svg b/assets/static/bootstrap-icons/shield-fill-check.svg new file mode 100644 index 0000000..f914f1f --- /dev/null +++ b/assets/static/bootstrap-icons/shield-fill-check.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-fill-exclamation.svg b/assets/static/bootstrap-icons/shield-fill-exclamation.svg new file mode 100644 index 0000000..99a6bf9 --- /dev/null +++ b/assets/static/bootstrap-icons/shield-fill-exclamation.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-fill-minus.svg b/assets/static/bootstrap-icons/shield-fill-minus.svg new file mode 100644 index 0000000..584f5ae --- /dev/null +++ b/assets/static/bootstrap-icons/shield-fill-minus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-fill-plus.svg b/assets/static/bootstrap-icons/shield-fill-plus.svg new file mode 100644 index 0000000..43a3169 --- /dev/null +++ b/assets/static/bootstrap-icons/shield-fill-plus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-fill-x.svg b/assets/static/bootstrap-icons/shield-fill-x.svg new file mode 100644 index 0000000..42267cf --- /dev/null +++ b/assets/static/bootstrap-icons/shield-fill-x.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-fill.svg b/assets/static/bootstrap-icons/shield-fill.svg new file mode 100644 index 0000000..12a61bc --- /dev/null +++ b/assets/static/bootstrap-icons/shield-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-lock-fill.svg b/assets/static/bootstrap-icons/shield-lock-fill.svg new file mode 100644 index 0000000..0fccf6f --- /dev/null +++ b/assets/static/bootstrap-icons/shield-lock-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-lock.svg b/assets/static/bootstrap-icons/shield-lock.svg new file mode 100644 index 0000000..316fb3c --- /dev/null +++ b/assets/static/bootstrap-icons/shield-lock.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-minus.svg b/assets/static/bootstrap-icons/shield-minus.svg new file mode 100644 index 0000000..9fb8712 --- /dev/null +++ b/assets/static/bootstrap-icons/shield-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-plus.svg b/assets/static/bootstrap-icons/shield-plus.svg new file mode 100644 index 0000000..3b19b28 --- /dev/null +++ b/assets/static/bootstrap-icons/shield-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-shaded.svg b/assets/static/bootstrap-icons/shield-shaded.svg new file mode 100644 index 0000000..4908f5d --- /dev/null +++ b/assets/static/bootstrap-icons/shield-shaded.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-slash-fill.svg b/assets/static/bootstrap-icons/shield-slash-fill.svg new file mode 100644 index 0000000..d270d6d --- /dev/null +++ b/assets/static/bootstrap-icons/shield-slash-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-slash.svg b/assets/static/bootstrap-icons/shield-slash.svg new file mode 100644 index 0000000..abc01b1 --- /dev/null +++ b/assets/static/bootstrap-icons/shield-slash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield-x.svg b/assets/static/bootstrap-icons/shield-x.svg new file mode 100644 index 0000000..cc9c59d --- /dev/null +++ b/assets/static/bootstrap-icons/shield-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shield.svg b/assets/static/bootstrap-icons/shield.svg new file mode 100644 index 0000000..7e18d1b --- /dev/null +++ b/assets/static/bootstrap-icons/shield.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shift-fill.svg b/assets/static/bootstrap-icons/shift-fill.svg new file mode 100644 index 0000000..37583e1 --- /dev/null +++ b/assets/static/bootstrap-icons/shift-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shift.svg b/assets/static/bootstrap-icons/shift.svg new file mode 100644 index 0000000..5d8a6e3 --- /dev/null +++ b/assets/static/bootstrap-icons/shift.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shop-window.svg b/assets/static/bootstrap-icons/shop-window.svg new file mode 100644 index 0000000..14e0d42 --- /dev/null +++ b/assets/static/bootstrap-icons/shop-window.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shop.svg b/assets/static/bootstrap-icons/shop.svg new file mode 100644 index 0000000..e6bb8c0 --- /dev/null +++ b/assets/static/bootstrap-icons/shop.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/shuffle.svg b/assets/static/bootstrap-icons/shuffle.svg new file mode 100644 index 0000000..2787bf2 --- /dev/null +++ b/assets/static/bootstrap-icons/shuffle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-dead-end-fill.svg b/assets/static/bootstrap-icons/sign-dead-end-fill.svg new file mode 100644 index 0000000..b362833 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-dead-end-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-dead-end.svg b/assets/static/bootstrap-icons/sign-dead-end.svg new file mode 100644 index 0000000..b87d368 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-dead-end.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-do-not-enter-fill.svg b/assets/static/bootstrap-icons/sign-do-not-enter-fill.svg new file mode 100644 index 0000000..f86ebfa --- /dev/null +++ b/assets/static/bootstrap-icons/sign-do-not-enter-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-do-not-enter.svg b/assets/static/bootstrap-icons/sign-do-not-enter.svg new file mode 100644 index 0000000..2e2c877 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-do-not-enter.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-intersection-fill.svg b/assets/static/bootstrap-icons/sign-intersection-fill.svg new file mode 100644 index 0000000..7fd8f3f --- /dev/null +++ b/assets/static/bootstrap-icons/sign-intersection-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-intersection-side-fill.svg b/assets/static/bootstrap-icons/sign-intersection-side-fill.svg new file mode 100644 index 0000000..38870b5 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-intersection-side-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-intersection-side.svg b/assets/static/bootstrap-icons/sign-intersection-side.svg new file mode 100644 index 0000000..df9015a --- /dev/null +++ b/assets/static/bootstrap-icons/sign-intersection-side.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-intersection-t-fill.svg b/assets/static/bootstrap-icons/sign-intersection-t-fill.svg new file mode 100644 index 0000000..15a007e --- /dev/null +++ b/assets/static/bootstrap-icons/sign-intersection-t-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-intersection-t.svg b/assets/static/bootstrap-icons/sign-intersection-t.svg new file mode 100644 index 0000000..4ba9f6f --- /dev/null +++ b/assets/static/bootstrap-icons/sign-intersection-t.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-intersection-y-fill.svg b/assets/static/bootstrap-icons/sign-intersection-y-fill.svg new file mode 100644 index 0000000..01a03d0 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-intersection-y-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-intersection-y.svg b/assets/static/bootstrap-icons/sign-intersection-y.svg new file mode 100644 index 0000000..e0e387f --- /dev/null +++ b/assets/static/bootstrap-icons/sign-intersection-y.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-intersection.svg b/assets/static/bootstrap-icons/sign-intersection.svg new file mode 100644 index 0000000..be2ffdc --- /dev/null +++ b/assets/static/bootstrap-icons/sign-intersection.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-merge-left-fill.svg b/assets/static/bootstrap-icons/sign-merge-left-fill.svg new file mode 100644 index 0000000..1408133 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-merge-left-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-merge-left.svg b/assets/static/bootstrap-icons/sign-merge-left.svg new file mode 100644 index 0000000..3447bcf --- /dev/null +++ b/assets/static/bootstrap-icons/sign-merge-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-merge-right-fill.svg b/assets/static/bootstrap-icons/sign-merge-right-fill.svg new file mode 100644 index 0000000..a952bb5 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-merge-right-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-merge-right.svg b/assets/static/bootstrap-icons/sign-merge-right.svg new file mode 100644 index 0000000..ab3e08a --- /dev/null +++ b/assets/static/bootstrap-icons/sign-merge-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-no-left-turn-fill.svg b/assets/static/bootstrap-icons/sign-no-left-turn-fill.svg new file mode 100644 index 0000000..85f421a --- /dev/null +++ b/assets/static/bootstrap-icons/sign-no-left-turn-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-no-left-turn.svg b/assets/static/bootstrap-icons/sign-no-left-turn.svg new file mode 100644 index 0000000..d45f090 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-no-left-turn.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-no-parking-fill.svg b/assets/static/bootstrap-icons/sign-no-parking-fill.svg new file mode 100644 index 0000000..c4100d9 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-no-parking-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-no-parking.svg b/assets/static/bootstrap-icons/sign-no-parking.svg new file mode 100644 index 0000000..1679603 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-no-parking.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-no-right-turn-fill.svg b/assets/static/bootstrap-icons/sign-no-right-turn-fill.svg new file mode 100644 index 0000000..c3883da --- /dev/null +++ b/assets/static/bootstrap-icons/sign-no-right-turn-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-no-right-turn.svg b/assets/static/bootstrap-icons/sign-no-right-turn.svg new file mode 100644 index 0000000..209b918 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-no-right-turn.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-railroad-fill.svg b/assets/static/bootstrap-icons/sign-railroad-fill.svg new file mode 100644 index 0000000..61d88a9 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-railroad-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-railroad.svg b/assets/static/bootstrap-icons/sign-railroad.svg new file mode 100644 index 0000000..b5d7339 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-railroad.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-stop-fill.svg b/assets/static/bootstrap-icons/sign-stop-fill.svg new file mode 100644 index 0000000..08efb9a --- /dev/null +++ b/assets/static/bootstrap-icons/sign-stop-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-stop-lights-fill.svg b/assets/static/bootstrap-icons/sign-stop-lights-fill.svg new file mode 100644 index 0000000..9be8e0c --- /dev/null +++ b/assets/static/bootstrap-icons/sign-stop-lights-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-stop-lights.svg b/assets/static/bootstrap-icons/sign-stop-lights.svg new file mode 100644 index 0000000..85918cf --- /dev/null +++ b/assets/static/bootstrap-icons/sign-stop-lights.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-stop.svg b/assets/static/bootstrap-icons/sign-stop.svg new file mode 100644 index 0000000..49128dc --- /dev/null +++ b/assets/static/bootstrap-icons/sign-stop.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-turn-left-fill.svg b/assets/static/bootstrap-icons/sign-turn-left-fill.svg new file mode 100644 index 0000000..4b8358e --- /dev/null +++ b/assets/static/bootstrap-icons/sign-turn-left-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-turn-left.svg b/assets/static/bootstrap-icons/sign-turn-left.svg new file mode 100644 index 0000000..c1b34ed --- /dev/null +++ b/assets/static/bootstrap-icons/sign-turn-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-turn-right-fill.svg b/assets/static/bootstrap-icons/sign-turn-right-fill.svg new file mode 100644 index 0000000..29d8d2c --- /dev/null +++ b/assets/static/bootstrap-icons/sign-turn-right-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-turn-right.svg b/assets/static/bootstrap-icons/sign-turn-right.svg new file mode 100644 index 0000000..956614a --- /dev/null +++ b/assets/static/bootstrap-icons/sign-turn-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-turn-slight-left-fill.svg b/assets/static/bootstrap-icons/sign-turn-slight-left-fill.svg new file mode 100644 index 0000000..80b2977 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-turn-slight-left-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-turn-slight-left.svg b/assets/static/bootstrap-icons/sign-turn-slight-left.svg new file mode 100644 index 0000000..98f0a0a --- /dev/null +++ b/assets/static/bootstrap-icons/sign-turn-slight-left.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-turn-slight-right-fill.svg b/assets/static/bootstrap-icons/sign-turn-slight-right-fill.svg new file mode 100644 index 0000000..2734952 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-turn-slight-right-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-turn-slight-right.svg b/assets/static/bootstrap-icons/sign-turn-slight-right.svg new file mode 100644 index 0000000..c462f19 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-turn-slight-right.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-yield-fill.svg b/assets/static/bootstrap-icons/sign-yield-fill.svg new file mode 100644 index 0000000..79fa190 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-yield-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sign-yield.svg b/assets/static/bootstrap-icons/sign-yield.svg new file mode 100644 index 0000000..23bd623 --- /dev/null +++ b/assets/static/bootstrap-icons/sign-yield.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/signal.svg b/assets/static/bootstrap-icons/signal.svg new file mode 100644 index 0000000..1583f97 --- /dev/null +++ b/assets/static/bootstrap-icons/signal.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/signpost-2-fill.svg b/assets/static/bootstrap-icons/signpost-2-fill.svg new file mode 100644 index 0000000..58c05a6 --- /dev/null +++ b/assets/static/bootstrap-icons/signpost-2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/signpost-2.svg b/assets/static/bootstrap-icons/signpost-2.svg new file mode 100644 index 0000000..e3454bd --- /dev/null +++ b/assets/static/bootstrap-icons/signpost-2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/signpost-fill.svg b/assets/static/bootstrap-icons/signpost-fill.svg new file mode 100644 index 0000000..00989a6 --- /dev/null +++ b/assets/static/bootstrap-icons/signpost-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/signpost-split-fill.svg b/assets/static/bootstrap-icons/signpost-split-fill.svg new file mode 100644 index 0000000..9b720f0 --- /dev/null +++ b/assets/static/bootstrap-icons/signpost-split-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/signpost-split.svg b/assets/static/bootstrap-icons/signpost-split.svg new file mode 100644 index 0000000..7fb69b7 --- /dev/null +++ b/assets/static/bootstrap-icons/signpost-split.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/signpost.svg b/assets/static/bootstrap-icons/signpost.svg new file mode 100644 index 0000000..940e664 --- /dev/null +++ b/assets/static/bootstrap-icons/signpost.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sim-fill.svg b/assets/static/bootstrap-icons/sim-fill.svg new file mode 100644 index 0000000..c7922b6 --- /dev/null +++ b/assets/static/bootstrap-icons/sim-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sim-slash-fill.svg b/assets/static/bootstrap-icons/sim-slash-fill.svg new file mode 100644 index 0000000..b608de7 --- /dev/null +++ b/assets/static/bootstrap-icons/sim-slash-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sim-slash.svg b/assets/static/bootstrap-icons/sim-slash.svg new file mode 100644 index 0000000..c8e0dc4 --- /dev/null +++ b/assets/static/bootstrap-icons/sim-slash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sim.svg b/assets/static/bootstrap-icons/sim.svg new file mode 100644 index 0000000..0d71a11 --- /dev/null +++ b/assets/static/bootstrap-icons/sim.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sina-weibo.svg b/assets/static/bootstrap-icons/sina-weibo.svg new file mode 100644 index 0000000..6d484d2 --- /dev/null +++ b/assets/static/bootstrap-icons/sina-weibo.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-backward-btn-fill.svg b/assets/static/bootstrap-icons/skip-backward-btn-fill.svg new file mode 100644 index 0000000..2029489 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-backward-btn-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-backward-btn.svg b/assets/static/bootstrap-icons/skip-backward-btn.svg new file mode 100644 index 0000000..7cae681 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-backward-btn.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-backward-circle-fill.svg b/assets/static/bootstrap-icons/skip-backward-circle-fill.svg new file mode 100644 index 0000000..7526356 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-backward-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-backward-circle.svg b/assets/static/bootstrap-icons/skip-backward-circle.svg new file mode 100644 index 0000000..8739f31 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-backward-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-backward-fill.svg b/assets/static/bootstrap-icons/skip-backward-fill.svg new file mode 100644 index 0000000..bf8f63e --- /dev/null +++ b/assets/static/bootstrap-icons/skip-backward-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-backward.svg b/assets/static/bootstrap-icons/skip-backward.svg new file mode 100644 index 0000000..ff5b821 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-backward.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-end-btn-fill.svg b/assets/static/bootstrap-icons/skip-end-btn-fill.svg new file mode 100644 index 0000000..e721821 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-end-btn-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-end-btn.svg b/assets/static/bootstrap-icons/skip-end-btn.svg new file mode 100644 index 0000000..6815577 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-end-btn.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-end-circle-fill.svg b/assets/static/bootstrap-icons/skip-end-circle-fill.svg new file mode 100644 index 0000000..63c0f68 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-end-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-end-circle.svg b/assets/static/bootstrap-icons/skip-end-circle.svg new file mode 100644 index 0000000..50f41d9 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-end-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-end-fill.svg b/assets/static/bootstrap-icons/skip-end-fill.svg new file mode 100644 index 0000000..afa88e3 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-end-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-end.svg b/assets/static/bootstrap-icons/skip-end.svg new file mode 100644 index 0000000..b2dfde6 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-end.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-forward-btn-fill.svg b/assets/static/bootstrap-icons/skip-forward-btn-fill.svg new file mode 100644 index 0000000..9547957 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-forward-btn-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-forward-btn.svg b/assets/static/bootstrap-icons/skip-forward-btn.svg new file mode 100644 index 0000000..46a61b0 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-forward-btn.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-forward-circle-fill.svg b/assets/static/bootstrap-icons/skip-forward-circle-fill.svg new file mode 100644 index 0000000..aefb633 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-forward-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-forward-circle.svg b/assets/static/bootstrap-icons/skip-forward-circle.svg new file mode 100644 index 0000000..7ebc928 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-forward-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-forward-fill.svg b/assets/static/bootstrap-icons/skip-forward-fill.svg new file mode 100644 index 0000000..6c54d79 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-forward-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-forward.svg b/assets/static/bootstrap-icons/skip-forward.svg new file mode 100644 index 0000000..c69cfc5 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-forward.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-start-btn-fill.svg b/assets/static/bootstrap-icons/skip-start-btn-fill.svg new file mode 100644 index 0000000..a0af702 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-start-btn-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-start-btn.svg b/assets/static/bootstrap-icons/skip-start-btn.svg new file mode 100644 index 0000000..b829fdd --- /dev/null +++ b/assets/static/bootstrap-icons/skip-start-btn.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-start-circle-fill.svg b/assets/static/bootstrap-icons/skip-start-circle-fill.svg new file mode 100644 index 0000000..bb33ab0 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-start-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-start-circle.svg b/assets/static/bootstrap-icons/skip-start-circle.svg new file mode 100644 index 0000000..d0e3323 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-start-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-start-fill.svg b/assets/static/bootstrap-icons/skip-start-fill.svg new file mode 100644 index 0000000..56cccc3 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-start-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skip-start.svg b/assets/static/bootstrap-icons/skip-start.svg new file mode 100644 index 0000000..76811a9 --- /dev/null +++ b/assets/static/bootstrap-icons/skip-start.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/skype.svg b/assets/static/bootstrap-icons/skype.svg new file mode 100644 index 0000000..ad4be4d --- /dev/null +++ b/assets/static/bootstrap-icons/skype.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/slack.svg b/assets/static/bootstrap-icons/slack.svg new file mode 100644 index 0000000..d914abe --- /dev/null +++ b/assets/static/bootstrap-icons/slack.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/slash-circle-fill.svg b/assets/static/bootstrap-icons/slash-circle-fill.svg new file mode 100644 index 0000000..5f71707 --- /dev/null +++ b/assets/static/bootstrap-icons/slash-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/slash-circle.svg b/assets/static/bootstrap-icons/slash-circle.svg new file mode 100644 index 0000000..eb26f19 --- /dev/null +++ b/assets/static/bootstrap-icons/slash-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/slash-lg.svg b/assets/static/bootstrap-icons/slash-lg.svg new file mode 100644 index 0000000..8b8b132 --- /dev/null +++ b/assets/static/bootstrap-icons/slash-lg.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/slash-square-fill.svg b/assets/static/bootstrap-icons/slash-square-fill.svg new file mode 100644 index 0000000..6fc9153 --- /dev/null +++ b/assets/static/bootstrap-icons/slash-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/slash-square.svg b/assets/static/bootstrap-icons/slash-square.svg new file mode 100644 index 0000000..0757006 --- /dev/null +++ b/assets/static/bootstrap-icons/slash-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/slash.svg b/assets/static/bootstrap-icons/slash.svg new file mode 100644 index 0000000..6d18af4 --- /dev/null +++ b/assets/static/bootstrap-icons/slash.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sliders.svg b/assets/static/bootstrap-icons/sliders.svg new file mode 100644 index 0000000..c64a06c --- /dev/null +++ b/assets/static/bootstrap-icons/sliders.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sliders2-vertical.svg b/assets/static/bootstrap-icons/sliders2-vertical.svg new file mode 100644 index 0000000..4fcb8ba --- /dev/null +++ b/assets/static/bootstrap-icons/sliders2-vertical.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sliders2.svg b/assets/static/bootstrap-icons/sliders2.svg new file mode 100644 index 0000000..975861e --- /dev/null +++ b/assets/static/bootstrap-icons/sliders2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/smartwatch.svg b/assets/static/bootstrap-icons/smartwatch.svg new file mode 100644 index 0000000..0a11991 --- /dev/null +++ b/assets/static/bootstrap-icons/smartwatch.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/snapchat.svg b/assets/static/bootstrap-icons/snapchat.svg new file mode 100644 index 0000000..01d3684 --- /dev/null +++ b/assets/static/bootstrap-icons/snapchat.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/snow.svg b/assets/static/bootstrap-icons/snow.svg new file mode 100644 index 0000000..9b648a5 --- /dev/null +++ b/assets/static/bootstrap-icons/snow.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/snow2.svg b/assets/static/bootstrap-icons/snow2.svg new file mode 100644 index 0000000..6533d63 --- /dev/null +++ b/assets/static/bootstrap-icons/snow2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/snow3.svg b/assets/static/bootstrap-icons/snow3.svg new file mode 100644 index 0000000..01c0d73 --- /dev/null +++ b/assets/static/bootstrap-icons/snow3.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sort-alpha-down-alt.svg b/assets/static/bootstrap-icons/sort-alpha-down-alt.svg new file mode 100644 index 0000000..d03f1aa --- /dev/null +++ b/assets/static/bootstrap-icons/sort-alpha-down-alt.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sort-alpha-down.svg b/assets/static/bootstrap-icons/sort-alpha-down.svg new file mode 100644 index 0000000..6ac3e84 --- /dev/null +++ b/assets/static/bootstrap-icons/sort-alpha-down.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sort-alpha-up-alt.svg b/assets/static/bootstrap-icons/sort-alpha-up-alt.svg new file mode 100644 index 0000000..a7b332e --- /dev/null +++ b/assets/static/bootstrap-icons/sort-alpha-up-alt.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sort-alpha-up.svg b/assets/static/bootstrap-icons/sort-alpha-up.svg new file mode 100644 index 0000000..c5f0e3a --- /dev/null +++ b/assets/static/bootstrap-icons/sort-alpha-up.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sort-down-alt.svg b/assets/static/bootstrap-icons/sort-down-alt.svg new file mode 100644 index 0000000..86a1bf6 --- /dev/null +++ b/assets/static/bootstrap-icons/sort-down-alt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sort-down.svg b/assets/static/bootstrap-icons/sort-down.svg new file mode 100644 index 0000000..8cfdf23 --- /dev/null +++ b/assets/static/bootstrap-icons/sort-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sort-numeric-down-alt.svg b/assets/static/bootstrap-icons/sort-numeric-down-alt.svg new file mode 100644 index 0000000..ce4e3c5 --- /dev/null +++ b/assets/static/bootstrap-icons/sort-numeric-down-alt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sort-numeric-down.svg b/assets/static/bootstrap-icons/sort-numeric-down.svg new file mode 100644 index 0000000..afa87be --- /dev/null +++ b/assets/static/bootstrap-icons/sort-numeric-down.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sort-numeric-up-alt.svg b/assets/static/bootstrap-icons/sort-numeric-up-alt.svg new file mode 100644 index 0000000..d83cbf9 --- /dev/null +++ b/assets/static/bootstrap-icons/sort-numeric-up-alt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sort-numeric-up.svg b/assets/static/bootstrap-icons/sort-numeric-up.svg new file mode 100644 index 0000000..25a1e54 --- /dev/null +++ b/assets/static/bootstrap-icons/sort-numeric-up.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sort-up-alt.svg b/assets/static/bootstrap-icons/sort-up-alt.svg new file mode 100644 index 0000000..9f78a20 --- /dev/null +++ b/assets/static/bootstrap-icons/sort-up-alt.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sort-up.svg b/assets/static/bootstrap-icons/sort-up.svg new file mode 100644 index 0000000..cda9ac7 --- /dev/null +++ b/assets/static/bootstrap-icons/sort-up.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/soundwave.svg b/assets/static/bootstrap-icons/soundwave.svg new file mode 100644 index 0000000..1444777 --- /dev/null +++ b/assets/static/bootstrap-icons/soundwave.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sourceforge.svg b/assets/static/bootstrap-icons/sourceforge.svg new file mode 100644 index 0000000..13d0c5f --- /dev/null +++ b/assets/static/bootstrap-icons/sourceforge.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/speaker-fill.svg b/assets/static/bootstrap-icons/speaker-fill.svg new file mode 100644 index 0000000..f6d9e33 --- /dev/null +++ b/assets/static/bootstrap-icons/speaker-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/speaker.svg b/assets/static/bootstrap-icons/speaker.svg new file mode 100644 index 0000000..1415b5d --- /dev/null +++ b/assets/static/bootstrap-icons/speaker.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/speedometer.svg b/assets/static/bootstrap-icons/speedometer.svg new file mode 100644 index 0000000..f6e3e61 --- /dev/null +++ b/assets/static/bootstrap-icons/speedometer.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/speedometer2.svg b/assets/static/bootstrap-icons/speedometer2.svg new file mode 100644 index 0000000..75e79c8 --- /dev/null +++ b/assets/static/bootstrap-icons/speedometer2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/spellcheck.svg b/assets/static/bootstrap-icons/spellcheck.svg new file mode 100644 index 0000000..69fec76 --- /dev/null +++ b/assets/static/bootstrap-icons/spellcheck.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/spotify.svg b/assets/static/bootstrap-icons/spotify.svg new file mode 100644 index 0000000..09d0e9f --- /dev/null +++ b/assets/static/bootstrap-icons/spotify.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/square-fill.svg b/assets/static/bootstrap-icons/square-fill.svg new file mode 100644 index 0000000..1e72d5e --- /dev/null +++ b/assets/static/bootstrap-icons/square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/square-half.svg b/assets/static/bootstrap-icons/square-half.svg new file mode 100644 index 0000000..aa3e349 --- /dev/null +++ b/assets/static/bootstrap-icons/square-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/square.svg b/assets/static/bootstrap-icons/square.svg new file mode 100644 index 0000000..0f086de --- /dev/null +++ b/assets/static/bootstrap-icons/square.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stack-overflow.svg b/assets/static/bootstrap-icons/stack-overflow.svg new file mode 100644 index 0000000..c5e5be6 --- /dev/null +++ b/assets/static/bootstrap-icons/stack-overflow.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stack.svg b/assets/static/bootstrap-icons/stack.svg new file mode 100644 index 0000000..3cf0eca --- /dev/null +++ b/assets/static/bootstrap-icons/stack.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/star-fill.svg b/assets/static/bootstrap-icons/star-fill.svg new file mode 100644 index 0000000..de09c4a --- /dev/null +++ b/assets/static/bootstrap-icons/star-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/star-half.svg b/assets/static/bootstrap-icons/star-half.svg new file mode 100644 index 0000000..8a70f53 --- /dev/null +++ b/assets/static/bootstrap-icons/star-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/star.svg b/assets/static/bootstrap-icons/star.svg new file mode 100644 index 0000000..fcdcb1c --- /dev/null +++ b/assets/static/bootstrap-icons/star.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stars.svg b/assets/static/bootstrap-icons/stars.svg new file mode 100644 index 0000000..b6fb4f2 --- /dev/null +++ b/assets/static/bootstrap-icons/stars.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/steam.svg b/assets/static/bootstrap-icons/steam.svg new file mode 100644 index 0000000..9daa3d3 --- /dev/null +++ b/assets/static/bootstrap-icons/steam.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stickies-fill.svg b/assets/static/bootstrap-icons/stickies-fill.svg new file mode 100644 index 0000000..039c3b8 --- /dev/null +++ b/assets/static/bootstrap-icons/stickies-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stickies.svg b/assets/static/bootstrap-icons/stickies.svg new file mode 100644 index 0000000..24e6492 --- /dev/null +++ b/assets/static/bootstrap-icons/stickies.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sticky-fill.svg b/assets/static/bootstrap-icons/sticky-fill.svg new file mode 100644 index 0000000..b36dcb1 --- /dev/null +++ b/assets/static/bootstrap-icons/sticky-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sticky.svg b/assets/static/bootstrap-icons/sticky.svg new file mode 100644 index 0000000..0d50e88 --- /dev/null +++ b/assets/static/bootstrap-icons/sticky.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stop-btn-fill.svg b/assets/static/bootstrap-icons/stop-btn-fill.svg new file mode 100644 index 0000000..70e562e --- /dev/null +++ b/assets/static/bootstrap-icons/stop-btn-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stop-btn.svg b/assets/static/bootstrap-icons/stop-btn.svg new file mode 100644 index 0000000..26348d5 --- /dev/null +++ b/assets/static/bootstrap-icons/stop-btn.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stop-circle-fill.svg b/assets/static/bootstrap-icons/stop-circle-fill.svg new file mode 100644 index 0000000..141668e --- /dev/null +++ b/assets/static/bootstrap-icons/stop-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stop-circle.svg b/assets/static/bootstrap-icons/stop-circle.svg new file mode 100644 index 0000000..3e1933a --- /dev/null +++ b/assets/static/bootstrap-icons/stop-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stop-fill.svg b/assets/static/bootstrap-icons/stop-fill.svg new file mode 100644 index 0000000..ca1b957 --- /dev/null +++ b/assets/static/bootstrap-icons/stop-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stop.svg b/assets/static/bootstrap-icons/stop.svg new file mode 100644 index 0000000..27f1fb6 --- /dev/null +++ b/assets/static/bootstrap-icons/stop.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stoplights-fill.svg b/assets/static/bootstrap-icons/stoplights-fill.svg new file mode 100644 index 0000000..f0b2d76 --- /dev/null +++ b/assets/static/bootstrap-icons/stoplights-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stoplights.svg b/assets/static/bootstrap-icons/stoplights.svg new file mode 100644 index 0000000..6db3e12 --- /dev/null +++ b/assets/static/bootstrap-icons/stoplights.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stopwatch-fill.svg b/assets/static/bootstrap-icons/stopwatch-fill.svg new file mode 100644 index 0000000..1228cf2 --- /dev/null +++ b/assets/static/bootstrap-icons/stopwatch-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stopwatch.svg b/assets/static/bootstrap-icons/stopwatch.svg new file mode 100644 index 0000000..aff8c33 --- /dev/null +++ b/assets/static/bootstrap-icons/stopwatch.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/strava.svg b/assets/static/bootstrap-icons/strava.svg new file mode 100644 index 0000000..0ed6bab --- /dev/null +++ b/assets/static/bootstrap-icons/strava.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/stripe.svg b/assets/static/bootstrap-icons/stripe.svg new file mode 100644 index 0000000..ba961a0 --- /dev/null +++ b/assets/static/bootstrap-icons/stripe.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/subscript.svg b/assets/static/bootstrap-icons/subscript.svg new file mode 100644 index 0000000..51f5eea --- /dev/null +++ b/assets/static/bootstrap-icons/subscript.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/substack.svg b/assets/static/bootstrap-icons/substack.svg new file mode 100644 index 0000000..e54179a --- /dev/null +++ b/assets/static/bootstrap-icons/substack.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/subtract.svg b/assets/static/bootstrap-icons/subtract.svg new file mode 100644 index 0000000..129c3d5 --- /dev/null +++ b/assets/static/bootstrap-icons/subtract.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/suit-club-fill.svg b/assets/static/bootstrap-icons/suit-club-fill.svg new file mode 100644 index 0000000..a787160 --- /dev/null +++ b/assets/static/bootstrap-icons/suit-club-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/suit-club.svg b/assets/static/bootstrap-icons/suit-club.svg new file mode 100644 index 0000000..3fbf98b --- /dev/null +++ b/assets/static/bootstrap-icons/suit-club.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/suit-diamond-fill.svg b/assets/static/bootstrap-icons/suit-diamond-fill.svg new file mode 100644 index 0000000..67617d6 --- /dev/null +++ b/assets/static/bootstrap-icons/suit-diamond-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/suit-diamond.svg b/assets/static/bootstrap-icons/suit-diamond.svg new file mode 100644 index 0000000..79b54c1 --- /dev/null +++ b/assets/static/bootstrap-icons/suit-diamond.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/suit-heart-fill.svg b/assets/static/bootstrap-icons/suit-heart-fill.svg new file mode 100644 index 0000000..d09850c --- /dev/null +++ b/assets/static/bootstrap-icons/suit-heart-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/suit-heart.svg b/assets/static/bootstrap-icons/suit-heart.svg new file mode 100644 index 0000000..173b32f --- /dev/null +++ b/assets/static/bootstrap-icons/suit-heart.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/suit-spade-fill.svg b/assets/static/bootstrap-icons/suit-spade-fill.svg new file mode 100644 index 0000000..cc465e5 --- /dev/null +++ b/assets/static/bootstrap-icons/suit-spade-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/suit-spade.svg b/assets/static/bootstrap-icons/suit-spade.svg new file mode 100644 index 0000000..7123c10 --- /dev/null +++ b/assets/static/bootstrap-icons/suit-spade.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/suitcase-fill.svg b/assets/static/bootstrap-icons/suitcase-fill.svg new file mode 100644 index 0000000..df62651 --- /dev/null +++ b/assets/static/bootstrap-icons/suitcase-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/suitcase-lg-fill.svg b/assets/static/bootstrap-icons/suitcase-lg-fill.svg new file mode 100644 index 0000000..cef1da9 --- /dev/null +++ b/assets/static/bootstrap-icons/suitcase-lg-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/suitcase-lg.svg b/assets/static/bootstrap-icons/suitcase-lg.svg new file mode 100644 index 0000000..ea447d2 --- /dev/null +++ b/assets/static/bootstrap-icons/suitcase-lg.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/suitcase.svg b/assets/static/bootstrap-icons/suitcase.svg new file mode 100644 index 0000000..65e619d --- /dev/null +++ b/assets/static/bootstrap-icons/suitcase.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/suitcase2-fill.svg b/assets/static/bootstrap-icons/suitcase2-fill.svg new file mode 100644 index 0000000..a2cb410 --- /dev/null +++ b/assets/static/bootstrap-icons/suitcase2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/suitcase2.svg b/assets/static/bootstrap-icons/suitcase2.svg new file mode 100644 index 0000000..e6ea533 --- /dev/null +++ b/assets/static/bootstrap-icons/suitcase2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sun-fill.svg b/assets/static/bootstrap-icons/sun-fill.svg new file mode 100644 index 0000000..c83f69a --- /dev/null +++ b/assets/static/bootstrap-icons/sun-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sun.svg b/assets/static/bootstrap-icons/sun.svg new file mode 100644 index 0000000..3777f07 --- /dev/null +++ b/assets/static/bootstrap-icons/sun.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sunglasses.svg b/assets/static/bootstrap-icons/sunglasses.svg new file mode 100644 index 0000000..1ff81f7 --- /dev/null +++ b/assets/static/bootstrap-icons/sunglasses.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sunrise-fill.svg b/assets/static/bootstrap-icons/sunrise-fill.svg new file mode 100644 index 0000000..c922d7c --- /dev/null +++ b/assets/static/bootstrap-icons/sunrise-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sunrise.svg b/assets/static/bootstrap-icons/sunrise.svg new file mode 100644 index 0000000..98adcfb --- /dev/null +++ b/assets/static/bootstrap-icons/sunrise.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sunset-fill.svg b/assets/static/bootstrap-icons/sunset-fill.svg new file mode 100644 index 0000000..91a8d0e --- /dev/null +++ b/assets/static/bootstrap-icons/sunset-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/sunset.svg b/assets/static/bootstrap-icons/sunset.svg new file mode 100644 index 0000000..e72d634 --- /dev/null +++ b/assets/static/bootstrap-icons/sunset.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/superscript.svg b/assets/static/bootstrap-icons/superscript.svg new file mode 100644 index 0000000..81543ae --- /dev/null +++ b/assets/static/bootstrap-icons/superscript.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/symmetry-horizontal.svg b/assets/static/bootstrap-icons/symmetry-horizontal.svg new file mode 100644 index 0000000..594735b --- /dev/null +++ b/assets/static/bootstrap-icons/symmetry-horizontal.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/symmetry-vertical.svg b/assets/static/bootstrap-icons/symmetry-vertical.svg new file mode 100644 index 0000000..6907280 --- /dev/null +++ b/assets/static/bootstrap-icons/symmetry-vertical.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/table.svg b/assets/static/bootstrap-icons/table.svg new file mode 100644 index 0000000..8f70585 --- /dev/null +++ b/assets/static/bootstrap-icons/table.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tablet-fill.svg b/assets/static/bootstrap-icons/tablet-fill.svg new file mode 100644 index 0000000..0746ead --- /dev/null +++ b/assets/static/bootstrap-icons/tablet-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tablet-landscape-fill.svg b/assets/static/bootstrap-icons/tablet-landscape-fill.svg new file mode 100644 index 0000000..6290024 --- /dev/null +++ b/assets/static/bootstrap-icons/tablet-landscape-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tablet-landscape.svg b/assets/static/bootstrap-icons/tablet-landscape.svg new file mode 100644 index 0000000..438d4d1 --- /dev/null +++ b/assets/static/bootstrap-icons/tablet-landscape.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tablet.svg b/assets/static/bootstrap-icons/tablet.svg new file mode 100644 index 0000000..eebeee3 --- /dev/null +++ b/assets/static/bootstrap-icons/tablet.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tag-fill.svg b/assets/static/bootstrap-icons/tag-fill.svg new file mode 100644 index 0000000..6a95e2d --- /dev/null +++ b/assets/static/bootstrap-icons/tag-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tag.svg b/assets/static/bootstrap-icons/tag.svg new file mode 100644 index 0000000..01d19b5 --- /dev/null +++ b/assets/static/bootstrap-icons/tag.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tags-fill.svg b/assets/static/bootstrap-icons/tags-fill.svg new file mode 100644 index 0000000..1673abb --- /dev/null +++ b/assets/static/bootstrap-icons/tags-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tags.svg b/assets/static/bootstrap-icons/tags.svg new file mode 100644 index 0000000..ade5519 --- /dev/null +++ b/assets/static/bootstrap-icons/tags.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/taxi-front-fill.svg b/assets/static/bootstrap-icons/taxi-front-fill.svg new file mode 100644 index 0000000..ef7f45b --- /dev/null +++ b/assets/static/bootstrap-icons/taxi-front-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/taxi-front.svg b/assets/static/bootstrap-icons/taxi-front.svg new file mode 100644 index 0000000..1b4337a --- /dev/null +++ b/assets/static/bootstrap-icons/taxi-front.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telegram.svg b/assets/static/bootstrap-icons/telegram.svg new file mode 100644 index 0000000..d260266 --- /dev/null +++ b/assets/static/bootstrap-icons/telegram.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telephone-fill.svg b/assets/static/bootstrap-icons/telephone-fill.svg new file mode 100644 index 0000000..2e9de2e --- /dev/null +++ b/assets/static/bootstrap-icons/telephone-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telephone-forward-fill.svg b/assets/static/bootstrap-icons/telephone-forward-fill.svg new file mode 100644 index 0000000..26fc35f --- /dev/null +++ b/assets/static/bootstrap-icons/telephone-forward-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telephone-forward.svg b/assets/static/bootstrap-icons/telephone-forward.svg new file mode 100644 index 0000000..08c07bd --- /dev/null +++ b/assets/static/bootstrap-icons/telephone-forward.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telephone-inbound-fill.svg b/assets/static/bootstrap-icons/telephone-inbound-fill.svg new file mode 100644 index 0000000..85434d0 --- /dev/null +++ b/assets/static/bootstrap-icons/telephone-inbound-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telephone-inbound.svg b/assets/static/bootstrap-icons/telephone-inbound.svg new file mode 100644 index 0000000..8ec20a6 --- /dev/null +++ b/assets/static/bootstrap-icons/telephone-inbound.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telephone-minus-fill.svg b/assets/static/bootstrap-icons/telephone-minus-fill.svg new file mode 100644 index 0000000..7b2fe9d --- /dev/null +++ b/assets/static/bootstrap-icons/telephone-minus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telephone-minus.svg b/assets/static/bootstrap-icons/telephone-minus.svg new file mode 100644 index 0000000..6ebc50e --- /dev/null +++ b/assets/static/bootstrap-icons/telephone-minus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telephone-outbound-fill.svg b/assets/static/bootstrap-icons/telephone-outbound-fill.svg new file mode 100644 index 0000000..0a18bda --- /dev/null +++ b/assets/static/bootstrap-icons/telephone-outbound-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telephone-outbound.svg b/assets/static/bootstrap-icons/telephone-outbound.svg new file mode 100644 index 0000000..566eb46 --- /dev/null +++ b/assets/static/bootstrap-icons/telephone-outbound.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telephone-plus-fill.svg b/assets/static/bootstrap-icons/telephone-plus-fill.svg new file mode 100644 index 0000000..b02874f --- /dev/null +++ b/assets/static/bootstrap-icons/telephone-plus-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telephone-plus.svg b/assets/static/bootstrap-icons/telephone-plus.svg new file mode 100644 index 0000000..787e0c6 --- /dev/null +++ b/assets/static/bootstrap-icons/telephone-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telephone-x-fill.svg b/assets/static/bootstrap-icons/telephone-x-fill.svg new file mode 100644 index 0000000..5410e16 --- /dev/null +++ b/assets/static/bootstrap-icons/telephone-x-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telephone-x.svg b/assets/static/bootstrap-icons/telephone-x.svg new file mode 100644 index 0000000..3f483a1 --- /dev/null +++ b/assets/static/bootstrap-icons/telephone-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/telephone.svg b/assets/static/bootstrap-icons/telephone.svg new file mode 100644 index 0000000..679e8a9 --- /dev/null +++ b/assets/static/bootstrap-icons/telephone.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tencent-qq.svg b/assets/static/bootstrap-icons/tencent-qq.svg new file mode 100644 index 0000000..0d5cd23 --- /dev/null +++ b/assets/static/bootstrap-icons/tencent-qq.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/terminal-dash.svg b/assets/static/bootstrap-icons/terminal-dash.svg new file mode 100644 index 0000000..9f46e8e --- /dev/null +++ b/assets/static/bootstrap-icons/terminal-dash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/terminal-fill.svg b/assets/static/bootstrap-icons/terminal-fill.svg new file mode 100644 index 0000000..fabd075 --- /dev/null +++ b/assets/static/bootstrap-icons/terminal-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/terminal-plus.svg b/assets/static/bootstrap-icons/terminal-plus.svg new file mode 100644 index 0000000..32c6432 --- /dev/null +++ b/assets/static/bootstrap-icons/terminal-plus.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/terminal-split.svg b/assets/static/bootstrap-icons/terminal-split.svg new file mode 100644 index 0000000..a378c37 --- /dev/null +++ b/assets/static/bootstrap-icons/terminal-split.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/terminal-x.svg b/assets/static/bootstrap-icons/terminal-x.svg new file mode 100644 index 0000000..aa59e7f --- /dev/null +++ b/assets/static/bootstrap-icons/terminal-x.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/terminal.svg b/assets/static/bootstrap-icons/terminal.svg new file mode 100644 index 0000000..44aef95 --- /dev/null +++ b/assets/static/bootstrap-icons/terminal.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/text-center.svg b/assets/static/bootstrap-icons/text-center.svg new file mode 100644 index 0000000..12d9e29 --- /dev/null +++ b/assets/static/bootstrap-icons/text-center.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/text-indent-left.svg b/assets/static/bootstrap-icons/text-indent-left.svg new file mode 100644 index 0000000..5a607af --- /dev/null +++ b/assets/static/bootstrap-icons/text-indent-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/text-indent-right.svg b/assets/static/bootstrap-icons/text-indent-right.svg new file mode 100644 index 0000000..de91d9e --- /dev/null +++ b/assets/static/bootstrap-icons/text-indent-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/text-left.svg b/assets/static/bootstrap-icons/text-left.svg new file mode 100644 index 0000000..36ae0d3 --- /dev/null +++ b/assets/static/bootstrap-icons/text-left.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/text-paragraph.svg b/assets/static/bootstrap-icons/text-paragraph.svg new file mode 100644 index 0000000..035a1c8 --- /dev/null +++ b/assets/static/bootstrap-icons/text-paragraph.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/text-right.svg b/assets/static/bootstrap-icons/text-right.svg new file mode 100644 index 0000000..98178e7 --- /dev/null +++ b/assets/static/bootstrap-icons/text-right.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/text-wrap.svg b/assets/static/bootstrap-icons/text-wrap.svg new file mode 100644 index 0000000..4c732d6 --- /dev/null +++ b/assets/static/bootstrap-icons/text-wrap.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/textarea-resize.svg b/assets/static/bootstrap-icons/textarea-resize.svg new file mode 100644 index 0000000..6401320 --- /dev/null +++ b/assets/static/bootstrap-icons/textarea-resize.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/textarea-t.svg b/assets/static/bootstrap-icons/textarea-t.svg new file mode 100644 index 0000000..145cbb7 --- /dev/null +++ b/assets/static/bootstrap-icons/textarea-t.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/textarea.svg b/assets/static/bootstrap-icons/textarea.svg new file mode 100644 index 0000000..176ca25 --- /dev/null +++ b/assets/static/bootstrap-icons/textarea.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/thermometer-half.svg b/assets/static/bootstrap-icons/thermometer-half.svg new file mode 100644 index 0000000..018eab1 --- /dev/null +++ b/assets/static/bootstrap-icons/thermometer-half.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/thermometer-high.svg b/assets/static/bootstrap-icons/thermometer-high.svg new file mode 100644 index 0000000..22e77d1 --- /dev/null +++ b/assets/static/bootstrap-icons/thermometer-high.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/thermometer-low.svg b/assets/static/bootstrap-icons/thermometer-low.svg new file mode 100644 index 0000000..1f0f5e1 --- /dev/null +++ b/assets/static/bootstrap-icons/thermometer-low.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/thermometer-snow.svg b/assets/static/bootstrap-icons/thermometer-snow.svg new file mode 100644 index 0000000..df7c1d1 --- /dev/null +++ b/assets/static/bootstrap-icons/thermometer-snow.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/thermometer-sun.svg b/assets/static/bootstrap-icons/thermometer-sun.svg new file mode 100644 index 0000000..c453dee --- /dev/null +++ b/assets/static/bootstrap-icons/thermometer-sun.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/thermometer.svg b/assets/static/bootstrap-icons/thermometer.svg new file mode 100644 index 0000000..8a5529b --- /dev/null +++ b/assets/static/bootstrap-icons/thermometer.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/threads-fill.svg b/assets/static/bootstrap-icons/threads-fill.svg new file mode 100644 index 0000000..b19666d --- /dev/null +++ b/assets/static/bootstrap-icons/threads-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/threads.svg b/assets/static/bootstrap-icons/threads.svg new file mode 100644 index 0000000..13c9e7a --- /dev/null +++ b/assets/static/bootstrap-icons/threads.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/three-dots-vertical.svg b/assets/static/bootstrap-icons/three-dots-vertical.svg new file mode 100644 index 0000000..f5ef7d4 --- /dev/null +++ b/assets/static/bootstrap-icons/three-dots-vertical.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/three-dots.svg b/assets/static/bootstrap-icons/three-dots.svg new file mode 100644 index 0000000..4706f52 --- /dev/null +++ b/assets/static/bootstrap-icons/three-dots.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/thunderbolt-fill.svg b/assets/static/bootstrap-icons/thunderbolt-fill.svg new file mode 100644 index 0000000..1faea43 --- /dev/null +++ b/assets/static/bootstrap-icons/thunderbolt-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/thunderbolt.svg b/assets/static/bootstrap-icons/thunderbolt.svg new file mode 100644 index 0000000..3655659 --- /dev/null +++ b/assets/static/bootstrap-icons/thunderbolt.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ticket-detailed-fill.svg b/assets/static/bootstrap-icons/ticket-detailed-fill.svg new file mode 100644 index 0000000..cd7a3a7 --- /dev/null +++ b/assets/static/bootstrap-icons/ticket-detailed-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ticket-detailed.svg b/assets/static/bootstrap-icons/ticket-detailed.svg new file mode 100644 index 0000000..cf32e88 --- /dev/null +++ b/assets/static/bootstrap-icons/ticket-detailed.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ticket-fill.svg b/assets/static/bootstrap-icons/ticket-fill.svg new file mode 100644 index 0000000..01e9108 --- /dev/null +++ b/assets/static/bootstrap-icons/ticket-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ticket-perforated-fill.svg b/assets/static/bootstrap-icons/ticket-perforated-fill.svg new file mode 100644 index 0000000..38c18dc --- /dev/null +++ b/assets/static/bootstrap-icons/ticket-perforated-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ticket-perforated.svg b/assets/static/bootstrap-icons/ticket-perforated.svg new file mode 100644 index 0000000..da44537 --- /dev/null +++ b/assets/static/bootstrap-icons/ticket-perforated.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ticket.svg b/assets/static/bootstrap-icons/ticket.svg new file mode 100644 index 0000000..eb813a1 --- /dev/null +++ b/assets/static/bootstrap-icons/ticket.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tiktok.svg b/assets/static/bootstrap-icons/tiktok.svg new file mode 100644 index 0000000..04c6679 --- /dev/null +++ b/assets/static/bootstrap-icons/tiktok.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/toggle-off.svg b/assets/static/bootstrap-icons/toggle-off.svg new file mode 100644 index 0000000..e1e89ad --- /dev/null +++ b/assets/static/bootstrap-icons/toggle-off.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/toggle-on.svg b/assets/static/bootstrap-icons/toggle-on.svg new file mode 100644 index 0000000..7cd6eb3 --- /dev/null +++ b/assets/static/bootstrap-icons/toggle-on.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/toggle2-off.svg b/assets/static/bootstrap-icons/toggle2-off.svg new file mode 100644 index 0000000..61739ce --- /dev/null +++ b/assets/static/bootstrap-icons/toggle2-off.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/toggle2-on.svg b/assets/static/bootstrap-icons/toggle2-on.svg new file mode 100644 index 0000000..d752ce8 --- /dev/null +++ b/assets/static/bootstrap-icons/toggle2-on.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/toggles.svg b/assets/static/bootstrap-icons/toggles.svg new file mode 100644 index 0000000..659c185 --- /dev/null +++ b/assets/static/bootstrap-icons/toggles.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/toggles2.svg b/assets/static/bootstrap-icons/toggles2.svg new file mode 100644 index 0000000..2f90344 --- /dev/null +++ b/assets/static/bootstrap-icons/toggles2.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tools.svg b/assets/static/bootstrap-icons/tools.svg new file mode 100644 index 0000000..f6efdcc --- /dev/null +++ b/assets/static/bootstrap-icons/tools.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tornado.svg b/assets/static/bootstrap-icons/tornado.svg new file mode 100644 index 0000000..2a6397c --- /dev/null +++ b/assets/static/bootstrap-icons/tornado.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/train-freight-front-fill.svg b/assets/static/bootstrap-icons/train-freight-front-fill.svg new file mode 100644 index 0000000..e272051 --- /dev/null +++ b/assets/static/bootstrap-icons/train-freight-front-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/train-freight-front.svg b/assets/static/bootstrap-icons/train-freight-front.svg new file mode 100644 index 0000000..097c960 --- /dev/null +++ b/assets/static/bootstrap-icons/train-freight-front.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/train-front-fill.svg b/assets/static/bootstrap-icons/train-front-fill.svg new file mode 100644 index 0000000..4acad08 --- /dev/null +++ b/assets/static/bootstrap-icons/train-front-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/train-front.svg b/assets/static/bootstrap-icons/train-front.svg new file mode 100644 index 0000000..81ce139 --- /dev/null +++ b/assets/static/bootstrap-icons/train-front.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/train-lightrail-front-fill.svg b/assets/static/bootstrap-icons/train-lightrail-front-fill.svg new file mode 100644 index 0000000..7bd87fb --- /dev/null +++ b/assets/static/bootstrap-icons/train-lightrail-front-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/train-lightrail-front.svg b/assets/static/bootstrap-icons/train-lightrail-front.svg new file mode 100644 index 0000000..d7aa87f --- /dev/null +++ b/assets/static/bootstrap-icons/train-lightrail-front.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/translate.svg b/assets/static/bootstrap-icons/translate.svg new file mode 100644 index 0000000..2e0754e --- /dev/null +++ b/assets/static/bootstrap-icons/translate.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/transparency.svg b/assets/static/bootstrap-icons/transparency.svg new file mode 100644 index 0000000..289a4b9 --- /dev/null +++ b/assets/static/bootstrap-icons/transparency.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/trash-fill.svg b/assets/static/bootstrap-icons/trash-fill.svg new file mode 100644 index 0000000..b67453a --- /dev/null +++ b/assets/static/bootstrap-icons/trash-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/trash.svg b/assets/static/bootstrap-icons/trash.svg new file mode 100644 index 0000000..3020264 --- /dev/null +++ b/assets/static/bootstrap-icons/trash.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/trash2-fill.svg b/assets/static/bootstrap-icons/trash2-fill.svg new file mode 100644 index 0000000..fb1d90d --- /dev/null +++ b/assets/static/bootstrap-icons/trash2-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/trash2.svg b/assets/static/bootstrap-icons/trash2.svg new file mode 100644 index 0000000..0cabe8d --- /dev/null +++ b/assets/static/bootstrap-icons/trash2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/trash3-fill.svg b/assets/static/bootstrap-icons/trash3-fill.svg new file mode 100644 index 0000000..42fbfc5 --- /dev/null +++ b/assets/static/bootstrap-icons/trash3-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/trash3.svg b/assets/static/bootstrap-icons/trash3.svg new file mode 100644 index 0000000..5194bf0 --- /dev/null +++ b/assets/static/bootstrap-icons/trash3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tree-fill.svg b/assets/static/bootstrap-icons/tree-fill.svg new file mode 100644 index 0000000..d00e733 --- /dev/null +++ b/assets/static/bootstrap-icons/tree-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tree.svg b/assets/static/bootstrap-icons/tree.svg new file mode 100644 index 0000000..17a5efe --- /dev/null +++ b/assets/static/bootstrap-icons/tree.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/trello.svg b/assets/static/bootstrap-icons/trello.svg new file mode 100644 index 0000000..bd88732 --- /dev/null +++ b/assets/static/bootstrap-icons/trello.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/triangle-fill.svg b/assets/static/bootstrap-icons/triangle-fill.svg new file mode 100644 index 0000000..474c8bb --- /dev/null +++ b/assets/static/bootstrap-icons/triangle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/triangle-half.svg b/assets/static/bootstrap-icons/triangle-half.svg new file mode 100644 index 0000000..a495ca0 --- /dev/null +++ b/assets/static/bootstrap-icons/triangle-half.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/triangle.svg b/assets/static/bootstrap-icons/triangle.svg new file mode 100644 index 0000000..95a6a9b --- /dev/null +++ b/assets/static/bootstrap-icons/triangle.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/trophy-fill.svg b/assets/static/bootstrap-icons/trophy-fill.svg new file mode 100644 index 0000000..f469737 --- /dev/null +++ b/assets/static/bootstrap-icons/trophy-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/trophy.svg b/assets/static/bootstrap-icons/trophy.svg new file mode 100644 index 0000000..ae13957 --- /dev/null +++ b/assets/static/bootstrap-icons/trophy.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tropical-storm.svg b/assets/static/bootstrap-icons/tropical-storm.svg new file mode 100644 index 0000000..9eb3354 --- /dev/null +++ b/assets/static/bootstrap-icons/tropical-storm.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/truck-flatbed.svg b/assets/static/bootstrap-icons/truck-flatbed.svg new file mode 100644 index 0000000..4b38155 --- /dev/null +++ b/assets/static/bootstrap-icons/truck-flatbed.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/truck-front-fill.svg b/assets/static/bootstrap-icons/truck-front-fill.svg new file mode 100644 index 0000000..39f72d0 --- /dev/null +++ b/assets/static/bootstrap-icons/truck-front-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/truck-front.svg b/assets/static/bootstrap-icons/truck-front.svg new file mode 100644 index 0000000..d805db5 --- /dev/null +++ b/assets/static/bootstrap-icons/truck-front.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/truck.svg b/assets/static/bootstrap-icons/truck.svg new file mode 100644 index 0000000..72c5439 --- /dev/null +++ b/assets/static/bootstrap-icons/truck.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tsunami.svg b/assets/static/bootstrap-icons/tsunami.svg new file mode 100644 index 0000000..be5f9be --- /dev/null +++ b/assets/static/bootstrap-icons/tsunami.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tv-fill.svg b/assets/static/bootstrap-icons/tv-fill.svg new file mode 100644 index 0000000..483c9fd --- /dev/null +++ b/assets/static/bootstrap-icons/tv-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/tv.svg b/assets/static/bootstrap-icons/tv.svg new file mode 100644 index 0000000..fa8b3c1 --- /dev/null +++ b/assets/static/bootstrap-icons/tv.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/twitch.svg b/assets/static/bootstrap-icons/twitch.svg new file mode 100644 index 0000000..b2c8ff5 --- /dev/null +++ b/assets/static/bootstrap-icons/twitch.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/twitter-x.svg b/assets/static/bootstrap-icons/twitter-x.svg new file mode 100644 index 0000000..2fafcc2 --- /dev/null +++ b/assets/static/bootstrap-icons/twitter-x.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/twitter.svg b/assets/static/bootstrap-icons/twitter.svg new file mode 100644 index 0000000..3001352 --- /dev/null +++ b/assets/static/bootstrap-icons/twitter.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/type-bold.svg b/assets/static/bootstrap-icons/type-bold.svg new file mode 100644 index 0000000..0814a2e --- /dev/null +++ b/assets/static/bootstrap-icons/type-bold.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/type-h1.svg b/assets/static/bootstrap-icons/type-h1.svg new file mode 100644 index 0000000..0df41f6 --- /dev/null +++ b/assets/static/bootstrap-icons/type-h1.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/type-h2.svg b/assets/static/bootstrap-icons/type-h2.svg new file mode 100644 index 0000000..03379ed --- /dev/null +++ b/assets/static/bootstrap-icons/type-h2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/type-h3.svg b/assets/static/bootstrap-icons/type-h3.svg new file mode 100644 index 0000000..97de531 --- /dev/null +++ b/assets/static/bootstrap-icons/type-h3.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/type-h4.svg b/assets/static/bootstrap-icons/type-h4.svg new file mode 100644 index 0000000..a7ddc81 --- /dev/null +++ b/assets/static/bootstrap-icons/type-h4.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/type-h5.svg b/assets/static/bootstrap-icons/type-h5.svg new file mode 100644 index 0000000..776bfa3 --- /dev/null +++ b/assets/static/bootstrap-icons/type-h5.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/type-h6.svg b/assets/static/bootstrap-icons/type-h6.svg new file mode 100644 index 0000000..9267192 --- /dev/null +++ b/assets/static/bootstrap-icons/type-h6.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/type-italic.svg b/assets/static/bootstrap-icons/type-italic.svg new file mode 100644 index 0000000..3ac6b09 --- /dev/null +++ b/assets/static/bootstrap-icons/type-italic.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/type-strikethrough.svg b/assets/static/bootstrap-icons/type-strikethrough.svg new file mode 100644 index 0000000..c64eba3 --- /dev/null +++ b/assets/static/bootstrap-icons/type-strikethrough.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/type-underline.svg b/assets/static/bootstrap-icons/type-underline.svg new file mode 100644 index 0000000..1c0b6c4 --- /dev/null +++ b/assets/static/bootstrap-icons/type-underline.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/type.svg b/assets/static/bootstrap-icons/type.svg new file mode 100644 index 0000000..8c1fde1 --- /dev/null +++ b/assets/static/bootstrap-icons/type.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ubuntu.svg b/assets/static/bootstrap-icons/ubuntu.svg new file mode 100644 index 0000000..89c8830 --- /dev/null +++ b/assets/static/bootstrap-icons/ubuntu.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ui-checks-grid.svg b/assets/static/bootstrap-icons/ui-checks-grid.svg new file mode 100644 index 0000000..e5d1ed9 --- /dev/null +++ b/assets/static/bootstrap-icons/ui-checks-grid.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ui-checks.svg b/assets/static/bootstrap-icons/ui-checks.svg new file mode 100644 index 0000000..5d02869 --- /dev/null +++ b/assets/static/bootstrap-icons/ui-checks.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ui-radios-grid.svg b/assets/static/bootstrap-icons/ui-radios-grid.svg new file mode 100644 index 0000000..9f9aae0 --- /dev/null +++ b/assets/static/bootstrap-icons/ui-radios-grid.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/ui-radios.svg b/assets/static/bootstrap-icons/ui-radios.svg new file mode 100644 index 0000000..9165340 --- /dev/null +++ b/assets/static/bootstrap-icons/ui-radios.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/umbrella-fill.svg b/assets/static/bootstrap-icons/umbrella-fill.svg new file mode 100644 index 0000000..3efaf13 --- /dev/null +++ b/assets/static/bootstrap-icons/umbrella-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/umbrella.svg b/assets/static/bootstrap-icons/umbrella.svg new file mode 100644 index 0000000..f7b698c --- /dev/null +++ b/assets/static/bootstrap-icons/umbrella.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/unindent.svg b/assets/static/bootstrap-icons/unindent.svg new file mode 100644 index 0000000..9e68255 --- /dev/null +++ b/assets/static/bootstrap-icons/unindent.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/union.svg b/assets/static/bootstrap-icons/union.svg new file mode 100644 index 0000000..ba23f54 --- /dev/null +++ b/assets/static/bootstrap-icons/union.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/unity.svg b/assets/static/bootstrap-icons/unity.svg new file mode 100644 index 0000000..8b84508 --- /dev/null +++ b/assets/static/bootstrap-icons/unity.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/universal-access-circle.svg b/assets/static/bootstrap-icons/universal-access-circle.svg new file mode 100644 index 0000000..e5ea936 --- /dev/null +++ b/assets/static/bootstrap-icons/universal-access-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/universal-access.svg b/assets/static/bootstrap-icons/universal-access.svg new file mode 100644 index 0000000..0d0d6ef --- /dev/null +++ b/assets/static/bootstrap-icons/universal-access.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/unlock-fill.svg b/assets/static/bootstrap-icons/unlock-fill.svg new file mode 100644 index 0000000..07156e7 --- /dev/null +++ b/assets/static/bootstrap-icons/unlock-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/unlock.svg b/assets/static/bootstrap-icons/unlock.svg new file mode 100644 index 0000000..4dda5e9 --- /dev/null +++ b/assets/static/bootstrap-icons/unlock.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/upc-scan.svg b/assets/static/bootstrap-icons/upc-scan.svg new file mode 100644 index 0000000..1a89554 --- /dev/null +++ b/assets/static/bootstrap-icons/upc-scan.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/upc.svg b/assets/static/bootstrap-icons/upc.svg new file mode 100644 index 0000000..785297d --- /dev/null +++ b/assets/static/bootstrap-icons/upc.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/upload.svg b/assets/static/bootstrap-icons/upload.svg new file mode 100644 index 0000000..9a4a363 --- /dev/null +++ b/assets/static/bootstrap-icons/upload.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/usb-c-fill.svg b/assets/static/bootstrap-icons/usb-c-fill.svg new file mode 100644 index 0000000..759eee2 --- /dev/null +++ b/assets/static/bootstrap-icons/usb-c-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/usb-c.svg b/assets/static/bootstrap-icons/usb-c.svg new file mode 100644 index 0000000..1198332 --- /dev/null +++ b/assets/static/bootstrap-icons/usb-c.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/usb-drive-fill.svg b/assets/static/bootstrap-icons/usb-drive-fill.svg new file mode 100644 index 0000000..2f656ee --- /dev/null +++ b/assets/static/bootstrap-icons/usb-drive-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/usb-drive.svg b/assets/static/bootstrap-icons/usb-drive.svg new file mode 100644 index 0000000..739051d --- /dev/null +++ b/assets/static/bootstrap-icons/usb-drive.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/usb-fill.svg b/assets/static/bootstrap-icons/usb-fill.svg new file mode 100644 index 0000000..a3b17fa --- /dev/null +++ b/assets/static/bootstrap-icons/usb-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/usb-micro-fill.svg b/assets/static/bootstrap-icons/usb-micro-fill.svg new file mode 100644 index 0000000..1469a9b --- /dev/null +++ b/assets/static/bootstrap-icons/usb-micro-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/usb-micro.svg b/assets/static/bootstrap-icons/usb-micro.svg new file mode 100644 index 0000000..ece7da7 --- /dev/null +++ b/assets/static/bootstrap-icons/usb-micro.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/usb-mini-fill.svg b/assets/static/bootstrap-icons/usb-mini-fill.svg new file mode 100644 index 0000000..3ab0747 --- /dev/null +++ b/assets/static/bootstrap-icons/usb-mini-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/usb-mini.svg b/assets/static/bootstrap-icons/usb-mini.svg new file mode 100644 index 0000000..f095b67 --- /dev/null +++ b/assets/static/bootstrap-icons/usb-mini.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/usb-plug-fill.svg b/assets/static/bootstrap-icons/usb-plug-fill.svg new file mode 100644 index 0000000..d1dc518 --- /dev/null +++ b/assets/static/bootstrap-icons/usb-plug-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/usb-plug.svg b/assets/static/bootstrap-icons/usb-plug.svg new file mode 100644 index 0000000..f3d7220 --- /dev/null +++ b/assets/static/bootstrap-icons/usb-plug.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/usb-symbol.svg b/assets/static/bootstrap-icons/usb-symbol.svg new file mode 100644 index 0000000..457f93f --- /dev/null +++ b/assets/static/bootstrap-icons/usb-symbol.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/usb.svg b/assets/static/bootstrap-icons/usb.svg new file mode 100644 index 0000000..737bef5 --- /dev/null +++ b/assets/static/bootstrap-icons/usb.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/valentine.svg b/assets/static/bootstrap-icons/valentine.svg new file mode 100644 index 0000000..7b8f0a3 --- /dev/null +++ b/assets/static/bootstrap-icons/valentine.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/valentine2.svg b/assets/static/bootstrap-icons/valentine2.svg new file mode 100644 index 0000000..6d95a2d --- /dev/null +++ b/assets/static/bootstrap-icons/valentine2.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/vector-pen.svg b/assets/static/bootstrap-icons/vector-pen.svg new file mode 100644 index 0000000..60115b7 --- /dev/null +++ b/assets/static/bootstrap-icons/vector-pen.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/view-list.svg b/assets/static/bootstrap-icons/view-list.svg new file mode 100644 index 0000000..9211543 --- /dev/null +++ b/assets/static/bootstrap-icons/view-list.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/view-stacked.svg b/assets/static/bootstrap-icons/view-stacked.svg new file mode 100644 index 0000000..84b5ccf --- /dev/null +++ b/assets/static/bootstrap-icons/view-stacked.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/vignette.svg b/assets/static/bootstrap-icons/vignette.svg new file mode 100644 index 0000000..d179290 --- /dev/null +++ b/assets/static/bootstrap-icons/vignette.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/vimeo.svg b/assets/static/bootstrap-icons/vimeo.svg new file mode 100644 index 0000000..6b8e4b5 --- /dev/null +++ b/assets/static/bootstrap-icons/vimeo.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/vinyl-fill.svg b/assets/static/bootstrap-icons/vinyl-fill.svg new file mode 100644 index 0000000..546d7bb --- /dev/null +++ b/assets/static/bootstrap-icons/vinyl-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/vinyl.svg b/assets/static/bootstrap-icons/vinyl.svg new file mode 100644 index 0000000..63647e5 --- /dev/null +++ b/assets/static/bootstrap-icons/vinyl.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/virus.svg b/assets/static/bootstrap-icons/virus.svg new file mode 100644 index 0000000..fd291a5 --- /dev/null +++ b/assets/static/bootstrap-icons/virus.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/virus2.svg b/assets/static/bootstrap-icons/virus2.svg new file mode 100644 index 0000000..53f44e9 --- /dev/null +++ b/assets/static/bootstrap-icons/virus2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/voicemail.svg b/assets/static/bootstrap-icons/voicemail.svg new file mode 100644 index 0000000..ba22eb1 --- /dev/null +++ b/assets/static/bootstrap-icons/voicemail.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/volume-down-fill.svg b/assets/static/bootstrap-icons/volume-down-fill.svg new file mode 100644 index 0000000..681d349 --- /dev/null +++ b/assets/static/bootstrap-icons/volume-down-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/volume-down.svg b/assets/static/bootstrap-icons/volume-down.svg new file mode 100644 index 0000000..3ca7e6a --- /dev/null +++ b/assets/static/bootstrap-icons/volume-down.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/volume-mute-fill.svg b/assets/static/bootstrap-icons/volume-mute-fill.svg new file mode 100644 index 0000000..148628c --- /dev/null +++ b/assets/static/bootstrap-icons/volume-mute-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/volume-mute.svg b/assets/static/bootstrap-icons/volume-mute.svg new file mode 100644 index 0000000..d06d3dc --- /dev/null +++ b/assets/static/bootstrap-icons/volume-mute.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/volume-off-fill.svg b/assets/static/bootstrap-icons/volume-off-fill.svg new file mode 100644 index 0000000..315110a --- /dev/null +++ b/assets/static/bootstrap-icons/volume-off-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/volume-off.svg b/assets/static/bootstrap-icons/volume-off.svg new file mode 100644 index 0000000..e5f82cc --- /dev/null +++ b/assets/static/bootstrap-icons/volume-off.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/volume-up-fill.svg b/assets/static/bootstrap-icons/volume-up-fill.svg new file mode 100644 index 0000000..0f94073 --- /dev/null +++ b/assets/static/bootstrap-icons/volume-up-fill.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/volume-up.svg b/assets/static/bootstrap-icons/volume-up.svg new file mode 100644 index 0000000..6347f42 --- /dev/null +++ b/assets/static/bootstrap-icons/volume-up.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/vr.svg b/assets/static/bootstrap-icons/vr.svg new file mode 100644 index 0000000..5ad5438 --- /dev/null +++ b/assets/static/bootstrap-icons/vr.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wallet-fill.svg b/assets/static/bootstrap-icons/wallet-fill.svg new file mode 100644 index 0000000..ee1c27d --- /dev/null +++ b/assets/static/bootstrap-icons/wallet-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wallet.svg b/assets/static/bootstrap-icons/wallet.svg new file mode 100644 index 0000000..6c9d247 --- /dev/null +++ b/assets/static/bootstrap-icons/wallet.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wallet2.svg b/assets/static/bootstrap-icons/wallet2.svg new file mode 100644 index 0000000..b127b0e --- /dev/null +++ b/assets/static/bootstrap-icons/wallet2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/watch.svg b/assets/static/bootstrap-icons/watch.svg new file mode 100644 index 0000000..542d4d8 --- /dev/null +++ b/assets/static/bootstrap-icons/watch.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/water.svg b/assets/static/bootstrap-icons/water.svg new file mode 100644 index 0000000..666653b --- /dev/null +++ b/assets/static/bootstrap-icons/water.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/webcam-fill.svg b/assets/static/bootstrap-icons/webcam-fill.svg new file mode 100644 index 0000000..e8db7ba --- /dev/null +++ b/assets/static/bootstrap-icons/webcam-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/webcam.svg b/assets/static/bootstrap-icons/webcam.svg new file mode 100644 index 0000000..0d23803 --- /dev/null +++ b/assets/static/bootstrap-icons/webcam.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wechat.svg b/assets/static/bootstrap-icons/wechat.svg new file mode 100644 index 0000000..3bc67dd --- /dev/null +++ b/assets/static/bootstrap-icons/wechat.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/whatsapp.svg b/assets/static/bootstrap-icons/whatsapp.svg new file mode 100644 index 0000000..5cde6f7 --- /dev/null +++ b/assets/static/bootstrap-icons/whatsapp.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wifi-1.svg b/assets/static/bootstrap-icons/wifi-1.svg new file mode 100644 index 0000000..5f3d340 --- /dev/null +++ b/assets/static/bootstrap-icons/wifi-1.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wifi-2.svg b/assets/static/bootstrap-icons/wifi-2.svg new file mode 100644 index 0000000..09d26c2 --- /dev/null +++ b/assets/static/bootstrap-icons/wifi-2.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wifi-off.svg b/assets/static/bootstrap-icons/wifi-off.svg new file mode 100644 index 0000000..2f5e61f --- /dev/null +++ b/assets/static/bootstrap-icons/wifi-off.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wifi.svg b/assets/static/bootstrap-icons/wifi.svg new file mode 100644 index 0000000..773e027 --- /dev/null +++ b/assets/static/bootstrap-icons/wifi.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wikipedia.svg b/assets/static/bootstrap-icons/wikipedia.svg new file mode 100644 index 0000000..11f2fc6 --- /dev/null +++ b/assets/static/bootstrap-icons/wikipedia.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wind.svg b/assets/static/bootstrap-icons/wind.svg new file mode 100644 index 0000000..2ac05cd --- /dev/null +++ b/assets/static/bootstrap-icons/wind.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/window-dash.svg b/assets/static/bootstrap-icons/window-dash.svg new file mode 100644 index 0000000..5e157af --- /dev/null +++ b/assets/static/bootstrap-icons/window-dash.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/window-desktop.svg b/assets/static/bootstrap-icons/window-desktop.svg new file mode 100644 index 0000000..fa17523 --- /dev/null +++ b/assets/static/bootstrap-icons/window-desktop.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/window-dock.svg b/assets/static/bootstrap-icons/window-dock.svg new file mode 100644 index 0000000..41cdf69 --- /dev/null +++ b/assets/static/bootstrap-icons/window-dock.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/window-fullscreen.svg b/assets/static/bootstrap-icons/window-fullscreen.svg new file mode 100644 index 0000000..421c4c5 --- /dev/null +++ b/assets/static/bootstrap-icons/window-fullscreen.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/window-plus.svg b/assets/static/bootstrap-icons/window-plus.svg new file mode 100644 index 0000000..e24ce0c --- /dev/null +++ b/assets/static/bootstrap-icons/window-plus.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/window-sidebar.svg b/assets/static/bootstrap-icons/window-sidebar.svg new file mode 100644 index 0000000..d020d13 --- /dev/null +++ b/assets/static/bootstrap-icons/window-sidebar.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/window-split.svg b/assets/static/bootstrap-icons/window-split.svg new file mode 100644 index 0000000..96bdd24 --- /dev/null +++ b/assets/static/bootstrap-icons/window-split.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/window-stack.svg b/assets/static/bootstrap-icons/window-stack.svg new file mode 100644 index 0000000..8862976 --- /dev/null +++ b/assets/static/bootstrap-icons/window-stack.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/window-x.svg b/assets/static/bootstrap-icons/window-x.svg new file mode 100644 index 0000000..c45e078 --- /dev/null +++ b/assets/static/bootstrap-icons/window-x.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/window.svg b/assets/static/bootstrap-icons/window.svg new file mode 100644 index 0000000..9bd2a2a --- /dev/null +++ b/assets/static/bootstrap-icons/window.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/windows.svg b/assets/static/bootstrap-icons/windows.svg new file mode 100644 index 0000000..af3b18c --- /dev/null +++ b/assets/static/bootstrap-icons/windows.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wordpress.svg b/assets/static/bootstrap-icons/wordpress.svg new file mode 100644 index 0000000..7d5808c --- /dev/null +++ b/assets/static/bootstrap-icons/wordpress.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wrench-adjustable-circle-fill.svg b/assets/static/bootstrap-icons/wrench-adjustable-circle-fill.svg new file mode 100644 index 0000000..33156c7 --- /dev/null +++ b/assets/static/bootstrap-icons/wrench-adjustable-circle-fill.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wrench-adjustable-circle.svg b/assets/static/bootstrap-icons/wrench-adjustable-circle.svg new file mode 100644 index 0000000..381fb30 --- /dev/null +++ b/assets/static/bootstrap-icons/wrench-adjustable-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wrench-adjustable.svg b/assets/static/bootstrap-icons/wrench-adjustable.svg new file mode 100644 index 0000000..e7456d7 --- /dev/null +++ b/assets/static/bootstrap-icons/wrench-adjustable.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/wrench.svg b/assets/static/bootstrap-icons/wrench.svg new file mode 100644 index 0000000..806cca0 --- /dev/null +++ b/assets/static/bootstrap-icons/wrench.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/x-circle-fill.svg b/assets/static/bootstrap-icons/x-circle-fill.svg new file mode 100644 index 0000000..4070fb3 --- /dev/null +++ b/assets/static/bootstrap-icons/x-circle-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/x-circle.svg b/assets/static/bootstrap-icons/x-circle.svg new file mode 100644 index 0000000..0e8c641 --- /dev/null +++ b/assets/static/bootstrap-icons/x-circle.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/x-diamond-fill.svg b/assets/static/bootstrap-icons/x-diamond-fill.svg new file mode 100644 index 0000000..6ec461a --- /dev/null +++ b/assets/static/bootstrap-icons/x-diamond-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/x-diamond.svg b/assets/static/bootstrap-icons/x-diamond.svg new file mode 100644 index 0000000..b93295e --- /dev/null +++ b/assets/static/bootstrap-icons/x-diamond.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/x-lg.svg b/assets/static/bootstrap-icons/x-lg.svg new file mode 100644 index 0000000..b689cbb --- /dev/null +++ b/assets/static/bootstrap-icons/x-lg.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/x-octagon-fill.svg b/assets/static/bootstrap-icons/x-octagon-fill.svg new file mode 100644 index 0000000..dd9fc6a --- /dev/null +++ b/assets/static/bootstrap-icons/x-octagon-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/x-octagon.svg b/assets/static/bootstrap-icons/x-octagon.svg new file mode 100644 index 0000000..181a39f --- /dev/null +++ b/assets/static/bootstrap-icons/x-octagon.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/x-square-fill.svg b/assets/static/bootstrap-icons/x-square-fill.svg new file mode 100644 index 0000000..5499578 --- /dev/null +++ b/assets/static/bootstrap-icons/x-square-fill.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/x-square.svg b/assets/static/bootstrap-icons/x-square.svg new file mode 100644 index 0000000..eb62b61 --- /dev/null +++ b/assets/static/bootstrap-icons/x-square.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/x.svg b/assets/static/bootstrap-icons/x.svg new file mode 100644 index 0000000..fdcc4e8 --- /dev/null +++ b/assets/static/bootstrap-icons/x.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/xbox.svg b/assets/static/bootstrap-icons/xbox.svg new file mode 100644 index 0000000..c0672b2 --- /dev/null +++ b/assets/static/bootstrap-icons/xbox.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/yelp.svg b/assets/static/bootstrap-icons/yelp.svg new file mode 100644 index 0000000..76e8884 --- /dev/null +++ b/assets/static/bootstrap-icons/yelp.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/yin-yang.svg b/assets/static/bootstrap-icons/yin-yang.svg new file mode 100644 index 0000000..1f50275 --- /dev/null +++ b/assets/static/bootstrap-icons/yin-yang.svg @@ -0,0 +1,4 @@ + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/youtube.svg b/assets/static/bootstrap-icons/youtube.svg new file mode 100644 index 0000000..3c9c0be --- /dev/null +++ b/assets/static/bootstrap-icons/youtube.svg @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/zoom-in.svg b/assets/static/bootstrap-icons/zoom-in.svg new file mode 100644 index 0000000..438e9bc --- /dev/null +++ b/assets/static/bootstrap-icons/zoom-in.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/bootstrap-icons/zoom-out.svg b/assets/static/bootstrap-icons/zoom-out.svg new file mode 100644 index 0000000..8be9f29 --- /dev/null +++ b/assets/static/bootstrap-icons/zoom-out.svg @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/assets/static/css/main.css b/assets/static/css/main.css new file mode 100644 index 0000000..60d19ea --- /dev/null +++ b/assets/static/css/main.css @@ -0,0 +1,2654 @@ +/* W3.CSS 4.15 December 2020 by Jan Egil and Borge Refsnes */ + +:root { + --quickbox-topbar-height: 50px; + --quickbox-footer-height: 64px; + --quickbox-send-width: 66px; +} + +html { + box-sizing: border-box; +} + +*, +*:before, +*:after { + box-sizing: inherit +} + +/* Extract from normalize.css by Nicolas Gallagher and Jonathan Neal git.io/normalize */ +html { + -ms-text-size-adjust: 100%; + -webkit-text-size-adjust: 100% +} + +body { + margin: 0; + min-height: 100vh; +} + +article, +aside, +details, +figcaption, +figure, +footer, +header, +main, +menu, +nav, +section { + display: block +} + +summary { + display: list-item +} + +audio, +canvas, +progress, +video { + display: inline-block +} + +progress { + vertical-align: baseline +} + +audio:not([controls]) { + display: none; + height: 0 +} + +[hidden], +template { + display: none +} + +a { + background-color: transparent +} + +a:active, +a:hover { + outline-width: 0 +} + +abbr[title] { + border-bottom: none; + text-decoration: underline; + text-decoration: underline dotted +} + +b, +strong { + font-weight: bolder +} + +dfn { + font-style: italic +} + +mark { + background: #ff0; + color: #000 +} + +small { + font-size: 80% +} + +sub, +sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline +} + +sub { + bottom: -0.25em +} + +sup { + top: -0.5em +} + +figure { + margin: 1em 40px +} + +img { + border-style: none +} + +code, +kbd, +pre, +samp { + font-family: monospace, monospace; + font-size: 1em +} + +hr { + box-sizing: content-box; + height: 0; + overflow: visible +} + +button, +input, +select, +textarea, +optgroup { + font: inherit; + margin: 0 +} + +optgroup { + font-weight: bold +} + +button, +input { + overflow: visible +} + +button, +select { + text-transform: none +} + +button, +[type=button], +[type=reset], +[type=submit] { + -webkit-appearance: button +} + +button::-moz-focus-inner, +[type=button]::-moz-focus-inner, +[type=reset]::-moz-focus-inner, +[type=submit]::-moz-focus-inner { + border-style: none; + padding: 0 +} + +button:-moz-focusring, +[type=button]:-moz-focusring, +[type=reset]:-moz-focusring, +[type=submit]:-moz-focusring { + outline: 1px dotted ButtonText +} + +fieldset { + border: 1px solid #c0c0c0; + margin: 0 2px; + padding: .35em .625em .75em +} + +legend { + color: inherit; + display: table; + max-width: 100%; + padding: 0; + white-space: normal +} + +textarea { + overflow: auto +} + +[type=checkbox], +[type=radio] { + padding: 0 +} + +[type=number]::-webkit-inner-spin-button, +[type=number]::-webkit-outer-spin-button { + height: auto +} + +[type=search] { + -webkit-appearance: textfield; + outline-offset: -2px +} + +[type=search]::-webkit-search-decoration { + -webkit-appearance: none +} + +::-webkit-file-upload-button { + -webkit-appearance: button; + font: inherit +} + +/* End extract */ +html, +body { + font-family: Verdana, sans-serif; + font-size: 16px; + line-height: 1.5 +} + +html { + overflow-x: hidden +} + +h1 { + font-size: 36px +} + +h2 { + font-size: 30px +} + +h3 { + font-size: 24px +} + +h4 { + font-size: 20px +} + +h5 { + font-size: 18px +} + +h6 { + font-size: 16px +} + +.w3-serif { + font-family: serif +} + +.w3-sans-serif { + font-family: sans-serif +} + +.w3-cursive { + font-family: cursive +} + +.w3-monospace { + font-family: monospace +} + +h1, +h2, +h3, +h4, +h5, +h6 { + font-family: "Segoe UI", Arial, sans-serif; + font-weight: 400; + margin: 10px 0 +} + +.w3-wide { + letter-spacing: 4px +} + +hr { + border: 0; + border-top: 1px solid #eee; + margin: 20px 0 +} + +.w3-image { + max-width: 100%; + height: auto +} + +img { + vertical-align: middle +} + +a { + color: inherit +} + +.w3-table, +.w3-table-all { + border-collapse: collapse; + border-spacing: 0; + width: 100%; + display: table +} + +.w3-table-all { + border: 1px solid #ccc +} + +.w3-bordered tr, +.w3-table-all tr { + border-bottom: 1px solid #ddd +} + +.w3-striped tbody tr:nth-child(even) { + background-color: #f1f1f1 +} + +.w3-table-all tr:nth-child(odd) { + background-color: #fff +} + +.w3-table-all tr:nth-child(even) { + background-color: #f1f1f1 +} + +.w3-hoverable tbody tr:hover, +.w3-ul.w3-hoverable li:hover { + background-color: #ccc +} + +.w3-centered tr th, +.w3-centered tr td { + text-align: center +} + +.w3-table td, +.w3-table th, +.w3-table-all td, +.w3-table-all th { + padding: 8px 8px; + display: table-cell; + text-align: left; + vertical-align: top +} + +.w3-table th:first-child, +.w3-table td:first-child, +.w3-table-all th:first-child, +.w3-table-all td:first-child { + padding-left: 16px +} + +.w3-btn, +.w3-button { + border: none; + display: inline-block; + padding: 8px 16px; + vertical-align: middle; + overflow: hidden; + text-decoration: none; + color: inherit; + background-color: inherit; + text-align: center; + cursor: pointer; + white-space: nowrap +} + +.w3-btn:hover { + box-shadow: 0 8px 16px 0 rgba(0, 0, 0, 0.2), 0 6px 20px 0 rgba(0, 0, 0, 0.19) +} + +.w3-btn, +.w3-button { + -webkit-touch-callout: none; + -webkit-user-select: none; + -khtml-user-select: none; + -moz-user-select: none; + -ms-user-select: none; + user-select: none +} + +.w3-disabled, +.w3-btn:disabled, +.w3-button:disabled { + cursor: not-allowed; + opacity: 0.3 +} + +.w3-disabled *, +:disabled * { + pointer-events: none +} + +.w3-btn.w3-disabled:hover, +.w3-btn:disabled:hover { + box-shadow: none +} + +.w3-badge, +.w3-tag { + background-color: #000; + color: #fff; + display: inline-block; + padding-left: 8px; + padding-right: 8px; + text-align: center +} + +.w3-badge { + border-radius: 50% +} + +.w3-ul { + list-style-type: none; + padding: 0; + margin: 0 +} + +.w3-ul li { + padding: 8px 16px; + border-bottom: 1px solid #ddd +} + +.w3-ul li:last-child { + border-bottom: none +} + +.w3-tooltip, +.w3-display-container { + position: relative +} + +.w3-tooltip .w3-text { + display: none +} + +.w3-tooltip:hover .w3-text { + display: inline-block +} + +.w3-ripple:active { + opacity: 0.5 +} + +.w3-ripple { + transition: opacity 0s +} + +.w3-input { + padding: 8px; + display: block; + border: none; + border-bottom: 1px solid #ccc; + width: 100% +} + +.w3-select { + padding: 9px 0; + width: 100%; + border: none; + border-bottom: 1px solid #ccc +} + +.w3-dropdown-click, +.w3-dropdown-hover { + position: relative; + display: inline-block; + cursor: pointer +} + +.w3-dropdown-hover:hover .w3-dropdown-content { + display: block +} + +.w3-dropdown-hover:first-child, +.w3-dropdown-click:hover { + background-color: #ccc; + color: #000 +} + +.w3-dropdown-hover:hover>.w3-button:first-child, +.w3-dropdown-click:hover>.w3-button:first-child { + background-color: #ccc; + color: #000 +} + +.w3-dropdown-content { + cursor: auto; + color: #000; + background-color: #fff; + display: none; + position: absolute; + min-width: 160px; + margin: 0; + padding: 0; + z-index: 1 +} + +.w3-check, +.w3-radio { + width: 18px; + height: 18px; + position: relative; + top: 6px +} + +.w3-sidebar { + height: 100%; + width: 200px; + background-color: #fff; + position: fixed !important; + z-index: 1; + overflow: auto +} + +.w3-bar-block .w3-dropdown-hover, +.w3-bar-block .w3-dropdown-click { + width: 100% +} + +.w3-bar-block .w3-dropdown-hover .w3-dropdown-content, +.w3-bar-block .w3-dropdown-click .w3-dropdown-content { + min-width: 100% +} + +.w3-bar-block .w3-dropdown-hover .w3-button, +.w3-bar-block .w3-dropdown-click .w3-button { + width: 100%; + text-align: left; + padding: 8px 16px +} + +.w3-main, +#main { + transition: margin-left .4s +} + +.w3-modal { + z-index: 100; + padding-top: 100px; + position: fixed; + left: 0; + top: 0; + width: 100%; + height: 100%; + overflow: auto; + background-color: rgb(0, 0, 0); + background-color: rgba(0, 0, 0, 0.4); + display: block; +} + +.w3-modal-content { + margin: auto; + background-color: #fff; + position: relative; + padding: 0; + outline: 0; + width: 600px; + color: rgb(84, 84, 84); +} + +.w3-modal-content h5 { + font-weight: 600 !important; +} + +.w3-bar { + width: 100%; + overflow: hidden +} + +.w3-center .w3-bar { + display: inline-block; + width: auto +} + +.w3-bar .w3-bar-item { + padding: 6px 16px; + float: left; + width: auto; + border: none; + display: block; + outline: 0 +} + +.w3-bar .w3-dropdown-hover, +.w3-bar .w3-dropdown-click { + position: static; + float: left +} + +.w3-bar .w3-button { + white-space: normal +} + +.w3-bar-block .w3-bar-item { + width: 100%; + display: block; + padding: 8px 16px; + text-align: left; + border: none; + white-space: normal; + float: none; + outline: 0 +} + +.w3-bar-block.w3-center .w3-bar-item { + text-align: center +} + +.w3-block { + display: block; + width: 100% +} + +.w3-responsive { + display: block; + overflow-x: auto +} + +.w3-container:after, +.w3-container:before, +.w3-panel:after, +.w3-panel:before, +.w3-row:after, +.w3-row:before, +.w3-row-padding:after, +.w3-row-padding:before, +.w3-cell-row:before, +.w3-cell-row:after, +.w3-clear:after, +.w3-clear:before, +.w3-bar:before, +.w3-bar:after { + content: ""; + display: table; + clear: both +} + +.w3-col, +.w3-half, +.w3-third, +.w3-twothird, +.w3-threequarter, +.w3-quarter { + float: left; + width: 100% +} + +.w3-col.s1 { + width: 8.33333% +} + +.w3-col.s2 { + width: 16.66666% +} + +.w3-col.s3 { + width: 24.99999% +} + +.w3-col.s4 { + width: 33.33333% +} + +.w3-col.s5 { + width: 41.66666% +} + +.w3-col.s6 { + width: 49.99999% +} + +.w3-col.s7 { + width: 58.33333% +} + +.w3-col.s8 { + width: 66.66666% +} + +.w3-col.s9 { + width: 74.99999% +} + +.w3-col.s10 { + width: 83.33333% +} + +.w3-col.s11 { + width: 91.66666% +} + +.w3-col.s12 { + width: 99.99999% +} + +@media (min-width:601px) { + .w3-col.m1 { + width: 8.33333% + } + + .w3-col.m2 { + width: 16.66666% + } + + .w3-col.m3, + .w3-quarter { + width: 24.99999% + } + + .w3-col.m4, + .w3-third { + width: 33.33333% + } + + .w3-col.m5 { + width: 41.66666% + } + + .w3-col.m6, + .w3-half { + width: 49.99999% + } + + .w3-col.m7 { + width: 58.33333% + } + + .w3-col.m8, + .w3-twothird { + width: 66.66666% + } + + .w3-col.m9, + .w3-threequarter { + width: 74.99999% + } + + .w3-col.m10 { + width: 83.33333% + } + + .w3-col.m11 { + width: 91.66666% + } + + .w3-col.m12 { + width: 99.99999% + } +} + +@media (min-width:993px) { + .w3-col.l1 { + width: 8.33333% + } + + .w3-col.l2 { + width: 16.66666% + } + + .w3-col.l3 { + width: 24.99999% + } + + .w3-col.l4 { + width: 33.33333% + } + + .w3-col.l5 { + width: 41.66666% + } + + .w3-col.l6 { + width: 49.99999% + } + + .w3-col.l7 { + width: 58.33333% + } + + .w3-col.l8 { + width: 66.66666% + } + + .w3-col.l9 { + width: 74.99999% + } + + .w3-col.l10 { + width: 83.33333% + } + + .w3-col.l11 { + width: 91.66666% + } + + .w3-col.l12 { + width: 99.99999% + } +} + +.w3-rest { + overflow: hidden +} + +.w3-stretch { + margin-left: -16px; + margin-right: -16px +} + +.w3-content, +.w3-auto { + margin-left: auto; + margin-right: auto +} + +.w3-content { + max-width: 980px +} + +.w3-auto { + max-width: 1140px +} + +.w3-cell-row { + display: table; + width: 100% +} + +.w3-cell { + display: table-cell +} + +.w3-cell-top { + vertical-align: top +} + +.w3-cell-middle { + vertical-align: middle +} + +.w3-cell-bottom { + vertical-align: bottom +} + +.w3-hide { + display: none !important +} + +.w3-show-block, +.w3-show { + display: block !important +} + +.w3-show-inline-block { + display: inline-block !important +} + +@media (max-width:1205px) { + .w3-auto { + max-width: 95% + } +} + +@media (max-width:600px) { + .w3-modal-content { + margin: 0 10px; + width: auto !important + } + + .w3-modal { + padding-top: 30px + } + + .w3-dropdown-hover.w3-mobile .w3-dropdown-content, + .w3-dropdown-click.w3-mobile .w3-dropdown-content { + position: relative + } + + .w3-hide-small { + display: none !important + } + + .w3-mobile { + display: block; + width: 100% !important + } + + .w3-bar-item.w3-mobile, + .w3-dropdown-hover.w3-mobile, + .w3-dropdown-click.w3-mobile { + text-align: center + } + + .w3-dropdown-hover.w3-mobile, + .w3-dropdown-hover.w3-mobile .w3-btn, + .w3-dropdown-hover.w3-mobile .w3-button, + .w3-dropdown-click.w3-mobile, + .w3-dropdown-click.w3-mobile .w3-btn, + .w3-dropdown-click.w3-mobile .w3-button { + width: 100% + } +} + +@media (max-width:768px) { + #modal-confirm-dialog-content { + width: 400px; + } + + .w3-modal-content { + width: 500px + } + + .w3-modal { + padding-top: 50px + } +} + +@media (min-width:993px) { + + #modal-confirm-dialog-content { + width: 600px; + } + + .w3-modal-content { + width: 900px + } + + .w3-hide-large { + display: none !important + } + + .w3-sidebar.w3-collapse { + display: block !important + } +} + +@media (max-width:992px) and (min-width:601px) { + .w3-hide-medium { + display: none !important + } +} + +@media (max-width:992px) { + .w3-sidebar.w3-collapse { + display: none + } + + .w3-main { + margin-left: 0 !important; + margin-right: 0 !important + } + + .w3-auto { + max-width: 100% + } +} + +.w3-top, +.w3-bottom { + position: fixed; + width: 100%; + z-index: 1 +} + +.w3-top { + top: 0 +} + +.w3-bottom { + bottom: 0 +} + +.w3-overlay { + position: fixed; + display: none; + width: 100%; + height: 100%; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.5); + z-index: 4; +} + +.w3-display-topleft { + position: absolute; + left: 0; + top: 0 +} + +.w3-display-topright { + position: absolute; + right: 0; + top: 0 +} + +.w3-display-bottomleft { + position: absolute; + left: 0; + bottom: 0 +} + +.w3-display-bottomright { + position: absolute; + right: 0; + bottom: 0 +} + +.w3-display-middle { + position: absolute; + top: 50%; + left: 50%; + transform: translate(-50%, -50%); + -ms-transform: translate(-50%, -50%) +} + +.w3-display-left { + position: absolute; + top: 50%; + left: 0%; + transform: translate(0%, -50%); + -ms-transform: translate(-0%, -50%) +} + +.w3-display-right { + position: absolute; + top: 50%; + right: 0%; + transform: translate(0%, -50%); + -ms-transform: translate(0%, -50%) +} + +.w3-display-topmiddle { + position: absolute; + left: 50%; + top: 0; + transform: translate(-50%, 0%); + -ms-transform: translate(-50%, 0%) +} + +.w3-display-bottommiddle { + position: absolute; + left: 50%; + bottom: 0; + transform: translate(-50%, 0%); + -ms-transform: translate(-50%, 0%) +} + +.w3-display-container:hover .w3-display-hover { + display: block +} + +.w3-display-container:hover span.w3-display-hover { + display: inline-block +} + +.w3-display-hover { + display: none +} + +.w3-display-position { + position: absolute +} + +.w3-circle { + border-radius: 50% +} + +.w3-round-small { + border-radius: 2px +} + +.w3-round, +.w3-round-medium { + border-radius: 4px +} + +.w3-round-large { + border-radius: 8px +} + +.w3-round-xlarge { + border-radius: 16px +} + +.w3-round-xxlarge { + border-radius: 32px +} + +.w3-row-padding, +.w3-row-padding>.w3-half, +.w3-row-padding>.w3-third, +.w3-row-padding>.w3-twothird, +.w3-row-padding>.w3-threequarter, +.w3-row-padding>.w3-quarter, +.w3-row-padding>.w3-col { + padding: 0 8px +} + +.w3-container, +.w3-panel { + padding: 0.01em 4px +} + +.w3-panel { + margin-top: 4px; + margin-bottom: 4px +} + +.w3-code, +.w3-codespan { + font-family: Consolas, "courier new"; + font-size: 16px +} + +.w3-code { + width: auto; + background-color: #fff; + padding: 8px 12px; + border-left: 4px solid #4CAF50; + word-wrap: break-word +} + +.w3-codespan { + color: crimson; + background-color: #f1f1f1; + padding-left: 4px; + padding-right: 4px; + font-size: 110% +} + +.w3-card, +.w3-card-2 { + box-shadow: 0 2px 5px 0 rgba(0, 0, 0, 0.16), 0 2px 10px 0 rgba(0, 0, 0, 0.12) +} + +.w3-card-4, +.w3-hover-shadow:hover { + box-shadow: 0 4px 10px 0 rgba(0, 0, 0, 0.2), 0 4px 20px 0 rgba(0, 0, 0, 0.19) +} + +.w3-spin { + animation: w3-spin 2s infinite linear +} + +@keyframes w3-spin { + 0% { + transform: rotate(0deg) + } + + 100% { + transform: rotate(359deg) + } +} + +.w3-animate-fading { + animation: fading 10s infinite +} + +@keyframes fading { + 0% { + opacity: 0 + } + + 50% { + opacity: 1 + } + + 100% { + opacity: 0 + } +} + +.w3-animate-opacity { + animation: opac 0.8s +} + +@keyframes opac { + from { + opacity: 0 + } + + to { + opacity: 1 + } +} + +.w3-animate-top { + position: relative; + animation: animatetop 0.4s +} + +@keyframes animatetop { + from { + top: -300px; + opacity: 0 + } + + to { + top: 0; + opacity: 1 + } +} + +.w3-animate-left { + position: relative; + animation: animateleft 0.4s +} + +@keyframes animateleft { + from { + left: -300px; + opacity: 0 + } + + to { + left: 0; + opacity: 1 + } +} + +.w3-animate-right { + position: relative; + animation: animateright 0.4s +} + +@keyframes animateright { + from { + right: -300px; + opacity: 0 + } + + to { + right: 0; + opacity: 1 + } +} + +.w3-animate-bottom { + position: relative; + animation: animatebottom 0.4s +} + +@keyframes animatebottom { + from { + bottom: -300px; + opacity: 0 + } + + to { + bottom: 0; + opacity: 1 + } +} + +.w3-animate-zoom { + animation: animatezoom 0.6s +} + +@keyframes animatezoom { + from { + transform: scale(0) + } + + to { + transform: scale(1) + } +} + +.w3-animate-input { + transition: width 0.4s ease-in-out +} + +.w3-animate-input:focus { + width: 100% !important +} + +.w3-opacity, +.w3-hover-opacity:hover { + opacity: 0.60 +} + +.w3-opacity-off, +.w3-hover-opacity-off:hover { + opacity: 1 +} + +.w3-opacity-max { + opacity: 0.25 +} + +.w3-opacity-min { + opacity: 0.75 +} + +.w3-greyscale-max, +.w3-grayscale-max, +.w3-hover-greyscale:hover, +.w3-hover-grayscale:hover { + filter: grayscale(100%) +} + +.w3-greyscale, +.w3-grayscale { + filter: grayscale(75%) +} + +.w3-greyscale-min, +.w3-grayscale-min { + filter: grayscale(50%) +} + +.w3-sepia { + filter: sepia(75%) +} + +.w3-sepia-max, +.w3-hover-sepia:hover { + filter: sepia(100%) +} + +.w3-sepia-min { + filter: sepia(50%) +} + +.w3-tiny { + font-size: 10px !important +} + +.w3-small { + font-size: 12px !important +} + +.w3-medium { + font-size: 15px !important +} + +.w3-large { + font-size: 18px !important +} + +.w3-xlarge { + font-size: 24px !important +} + +.w3-xxlarge { + font-size: 36px !important +} + +.w3-xxxlarge { + font-size: 48px !important +} + +.w3-jumbo { + font-size: 64px !important +} + +.w3-left-align { + text-align: left !important +} + +.w3-right-align { + text-align: right !important +} + +.w3-justify { + text-align: justify !important +} + +.w3-center { + text-align: center !important +} + +.w3-border-0 { + border: 0 !important +} + +.w3-border { + border: 1px solid #ccc !important +} + +.w3-border-top { + border-top: 1px solid #ccc !important +} + +.w3-border-bottom { + border-bottom: 1px solid #ccc !important +} + +.w3-border-left { + border-left: 1px solid #ccc !important +} + +.w3-border-right { + border-right: 1px solid #ccc !important +} + +.w3-topbar { + border-top: 6px solid #ccc !important +} + +.w3-bottombar { + border-bottom: 6px solid #ccc !important +} + +.w3-leftbar { + border-left: 6px solid #ccc !important +} + +.w3-rightbar { + border-right: 6px solid #ccc !important +} + +.w3-section, +.w3-code { + margin-top: 16px !important; + margin-bottom: 16px !important +} + +.w3-margin { + margin: 16px !important +} + +.w3-margin-top { + margin-top: 16px !important +} + +.w3-margin-bottom { + margin-bottom: 16px !important +} + +.w3-margin-left { + margin-left: 16px !important +} + +.w3-margin-right { + margin-right: 16px !important +} + +.w3-padding-small { + padding: 4px 8px !important +} + +.w3-padding { + padding: 8px 16px !important +} + +.w3-padding-large { + padding: 12px 24px !important +} + +.w3-padding-16 { + padding-top: 16px !important; + padding-bottom: 16px !important +} + +.w3-padding-24 { + padding-top: 24px !important; + padding-bottom: 24px !important +} + +.w3-padding-32 { + padding-top: 32px !important; + padding-bottom: 32px !important +} + +.w3-padding-48 { + padding-top: 48px !important; + padding-bottom: 48px !important +} + +.w3-padding-64 { + padding-top: 64px !important; + padding-bottom: 64px !important +} + +.w3-padding-top-64 { + padding-top: 64px !important +} + +.w3-padding-top-48 { + padding-top: 48px !important +} + +.w3-padding-top-32 { + padding-top: 32px !important +} + +.w3-padding-top-24 { + padding-top: 24px !important +} + +.w3-left { + float: left !important +} + +.w3-right { + float: right !important +} + +.w3-button:hover { + color: #000 !important; + background-color: #ccc !important +} + +.w3-transparent, +.w3-hover-none:hover { + background-color: transparent !important +} + +.w3-hover-none:hover { + box-shadow: none !important +} + +/* Colors */ +.w3-amber, +.w3-hover-amber:hover { + color: #000 !important; + background-color: #ffc107 !important +} + +.w3-aqua, +.w3-hover-aqua:hover { + color: #000 !important; + background-color: #00ffff !important +} + +.w3-blue, +.w3-hover-blue:hover { + color: #fff !important; + background-color: #2196F3 !important +} + +.w3-light-blue, +.w3-hover-light-blue:hover { + color: #000 !important; + background-color: #87CEEB !important +} + +.w3-brown, +.w3-hover-brown:hover { + color: #fff !important; + background-color: #795548 !important +} + +.w3-cyan, +.w3-hover-cyan:hover { + color: #000 !important; + background-color: #00bcd4 !important +} + +.w3-blue-grey, +.w3-hover-blue-grey:hover, +.w3-blue-gray, +.w3-hover-blue-gray:hover { + color: #fff !important; + background-color: #607d8b !important +} + +.w3-green, +.w3-hover-green:hover { + color: #fff !important; + background-color: #4CAF50 !important +} + +.w3-light-green, +.w3-hover-light-green:hover { + color: #000 !important; + background-color: #8bc34a !important +} + +.w3-indigo, +.w3-hover-indigo:hover { + color: #fff !important; + background-color: #3f51b5 !important +} + +.w3-khaki, +.w3-hover-khaki:hover { + color: #000 !important; + background-color: #f0e68c !important +} + +.w3-lime, +.w3-hover-lime:hover { + color: #000 !important; + background-color: #cddc39 !important +} + +.w3-orange, +.w3-hover-orange:hover { + color: #000 !important; + background-color: #ff9800 !important +} + +.w3-deep-orange, +.w3-hover-deep-orange:hover { + color: #fff !important; + background-color: #ff5722 !important +} + +.w3-pink, +.w3-hover-pink:hover { + color: #fff !important; + background-color: #e91e63 !important +} + +.w3-purple, +.w3-hover-purple:hover { + color: #fff !important; + background-color: #9c27b0 !important +} + +.w3-deep-purple, +.w3-hover-deep-purple:hover { + color: #fff !important; + background-color: #673ab7 !important +} + +.w3-red, +.w3-hover-red:hover { + color: #fff !important; + background-color: #f44336 !important +} + +.w3-sand, +.w3-hover-sand:hover { + color: #000 !important; + background-color: #fdf5e6 !important +} + +.w3-teal, +.w3-hover-teal:hover { + color: #fff !important; + background-color: #009688 !important +} + +.w3-yellow, +.w3-hover-yellow:hover { + color: #000 !important; + background-color: #ffeb3b !important +} + +.w3-white, +.w3-hover-white:hover { + color: #000 !important; + background-color: #fff !important +} + +.w3-black, +.w3-hover-black:hover { + color: #fff !important; + background-color: #000 !important +} + +.w3-grey, +.w3-hover-grey:hover, +.w3-gray, +.w3-hover-gray:hover { + color: #000 !important; + background-color: #9e9e9e !important +} + +.w3-light-grey, +.w3-hover-light-grey:hover, +.w3-light-gray, +.w3-hover-light-gray:hover { + color: #000 !important; + background-color: #f1f1f1 !important +} + +.w3-dark-grey, +.w3-hover-dark-grey:hover, +.w3-dark-gray, +.w3-hover-dark-gray:hover { + color: #fff !important; + background-color: #616161 !important +} + +.w3-pale-red, +.w3-hover-pale-red:hover { + color: #000 !important; + background-color: #ffdddd !important +} + +.w3-pale-green, +.w3-hover-pale-green:hover { + color: #000 !important; + background-color: #ddffdd !important +} + +.w3-pale-yellow, +.w3-hover-pale-yellow:hover { + color: #000 !important; + background-color: #ffffcc !important +} + +.w3-pale-blue, +.w3-hover-pale-blue:hover { + color: #000 !important; + background-color: #ddffff !important +} + +.w3-text-amber, +.w3-hover-text-amber:hover { + color: #ffc107 !important +} + +.w3-text-aqua, +.w3-hover-text-aqua:hover { + color: #00ffff !important +} + +.w3-text-blue, +.w3-hover-text-blue:hover { + color: #2196F3 !important +} + +.w3-text-light-blue, +.w3-hover-text-light-blue:hover { + color: #87CEEB !important +} + +.w3-text-brown, +.w3-hover-text-brown:hover { + color: #795548 !important +} + +.w3-text-cyan, +.w3-hover-text-cyan:hover { + color: #00bcd4 !important +} + +.w3-text-blue-grey, +.w3-hover-text-blue-grey:hover, +.w3-text-blue-gray, +.w3-hover-text-blue-gray:hover { + color: #607d8b !important +} + +.w3-text-green, +.w3-hover-text-green:hover { + color: #4CAF50 !important +} + +.w3-text-light-green, +.w3-hover-text-light-green:hover { + color: #8bc34a !important +} + +.w3-text-indigo, +.w3-hover-text-indigo:hover { + color: #3f51b5 !important +} + +.w3-text-khaki, +.w3-hover-text-khaki:hover { + color: #b4aa50 !important +} + +.w3-text-lime, +.w3-hover-text-lime:hover { + color: #cddc39 !important +} + +.w3-text-orange, +.w3-hover-text-orange:hover { + color: #ff9800 !important +} + +.w3-text-deep-orange, +.w3-hover-text-deep-orange:hover { + color: #ff5722 !important +} + +.w3-text-pink, +.w3-hover-text-pink:hover { + color: #e91e63 !important +} + +.w3-text-purple, +.w3-hover-text-purple:hover { + color: #9c27b0 !important +} + +.w3-text-deep-purple, +.w3-hover-text-deep-purple:hover { + color: #673ab7 !important +} + +.w3-text-red, +.w3-hover-text-red:hover { + color: #f44336 !important +} + +.w3-text-sand, +.w3-hover-text-sand:hover { + color: #fdf5e6 !important +} + +.w3-text-teal, +.w3-hover-text-teal:hover { + color: #009688 !important +} + +.w3-text-yellow, +.w3-hover-text-yellow:hover { + color: #d2be0e !important +} + +.w3-text-white, +.w3-hover-text-white:hover { + color: #fff !important +} + +.w3-text-black, +.w3-hover-text-black:hover { + color: #000 !important +} + +.w3-text-grey, +.w3-hover-text-grey:hover, +.w3-text-gray, +.w3-hover-text-gray:hover { + color: #757575 !important +} + +.w3-text-light-grey, +.w3-hover-text-light-grey:hover, +.w3-text-light-gray, +.w3-hover-text-light-gray:hover { + color: #f1f1f1 !important +} + +.w3-text-dark-grey, +.w3-hover-text-dark-grey:hover, +.w3-text-dark-gray, +.w3-hover-text-dark-gray:hover { + color: #3a3a3a !important +} + +.w3-border-amber, +.w3-hover-border-amber:hover { + border-color: #ffc107 !important +} + +.w3-border-aqua, +.w3-hover-border-aqua:hover { + border-color: #00ffff !important +} + +.w3-border-blue, +.w3-hover-border-blue:hover { + border-color: #2196F3 !important +} + +.w3-border-light-blue, +.w3-hover-border-light-blue:hover { + border-color: #87CEEB !important +} + +.w3-border-brown, +.w3-hover-border-brown:hover { + border-color: #795548 !important +} + +.w3-border-cyan, +.w3-hover-border-cyan:hover { + border-color: #00bcd4 !important +} + +.w3-border-blue-grey, +.w3-hover-border-blue-grey:hover, +.w3-border-blue-gray, +.w3-hover-border-blue-gray:hover { + border-color: #607d8b !important +} + +.w3-border-green, +.w3-hover-border-green:hover { + border-color: #4CAF50 !important +} + +.w3-border-light-green, +.w3-hover-border-light-green:hover { + border-color: #8bc34a !important +} + +.w3-border-indigo, +.w3-hover-border-indigo:hover { + border-color: #3f51b5 !important +} + +.w3-border-khaki, +.w3-hover-border-khaki:hover { + border-color: #f0e68c !important +} + +.w3-border-lime, +.w3-hover-border-lime:hover { + border-color: #cddc39 !important +} + +.w3-border-orange, +.w3-hover-border-orange:hover { + border-color: #ff9800 !important +} + +.w3-border-deep-orange, +.w3-hover-border-deep-orange:hover { + border-color: #ff5722 !important +} + +.w3-border-pink, +.w3-hover-border-pink:hover { + border-color: #e91e63 !important +} + +.w3-border-purple, +.w3-hover-border-purple:hover { + border-color: #9c27b0 !important +} + +.w3-border-deep-purple, +.w3-hover-border-deep-purple:hover { + border-color: #673ab7 !important +} + +.w3-border-red, +.w3-hover-border-red:hover { + border-color: #f44336 !important +} + +.w3-border-sand, +.w3-hover-border-sand:hover { + border-color: #fdf5e6 !important +} + +.w3-border-teal, +.w3-hover-border-teal:hover { + border-color: #009688 !important +} + +.w3-border-yellow, +.w3-hover-border-yellow:hover { + border-color: #ffeb3b !important +} + +.w3-border-white, +.w3-hover-border-white:hover { + border-color: #fff !important +} + +.w3-border-black, +.w3-hover-border-black:hover { + border-color: #000 !important +} + +.w3-border-grey, +.w3-hover-border-grey:hover, +.w3-border-gray, +.w3-hover-border-gray:hover { + border-color: #9e9e9e !important +} + +.w3-border-light-grey, +.w3-hover-border-light-grey:hover, +.w3-border-light-gray, +.w3-hover-border-light-gray:hover { + border-color: #f1f1f1 !important +} + +.w3-border-dark-grey, +.w3-hover-border-dark-grey:hover, +.w3-border-dark-gray, +.w3-hover-border-dark-gray:hover { + border-color: #616161 !important +} + +.w3-border-pale-red, +.w3-hover-border-pale-red:hover { + border-color: #ffe7e7 !important +} + +.w3-border-pale-green, +.w3-hover-border-pale-green:hover { + border-color: #e7ffe7 !important +} + +.w3-border-pale-yellow, +.w3-hover-border-pale-yellow:hover { + border-color: #ffffcc !important +} + +.w3-border-pale-blue, +.w3-hover-border-pale-blue:hover { + border-color: #e7ffff !important +} + +.w3-metro-darken { + color: #fff !important; + background-color: #1d1d1d !important +} + +.w3-metro-light-blue { + color: #000 !important; + background-color: #eff4ff !important +} + +.w3-metro-blue { + color: #fff !important; + background-color: #2d89ef !important +} + +.w3-metro-dark-blue { + color: #fff !important; + background-color: #2b5797 !important +} + +.w3-text-metro-dark-blue { + color: #2b5797; +} + +.w3-hover-metro-dark-blue:hover { + color: #fff !important; + background-color: #2b5797 !important; +} + +.w3-hover-round-large { + border-radius: 8px; +} + +blockquote { + background: #f9f9f9; + margin: 0.6em 0px; + padding: 0.1em 10px 0.1em; + quotes: "\201C" "\201D" "\2018" "\2019"; +} + +pre { + overflow: auto; +} + +a { + text-decoration: none; +} + +.alert-success { + color: #000; + background-color: #ccc; +} + +.alert-failure { + color: #fff; + background-color: #b91d47; +} + +.tab-bar>a { + margin-right: 6px; +} + +.tab-button { + border-top-left-radius: 8px; + border-top-right-radius: 8px; + background-color: #ccc; +} + +.tab-button.active, +.tab-button:hover { + background-color: #f1f1f1 !important; +} + +.links-list a:not(:last-of-type)::after { + content: " | " +} + +.label-check { + margin-left: 5px; +} + +#appTitle { + height: 50px; + background-color: #2b5797; + color: #ffffff; + font-size: 18px; + padding-left: 8px; + padding-top: 8px; + position: fixed; + width: 300px; + margin-bottom: 10px; +} + +#searchBar { + padding-top: 3px; +} + +#page-content { + padding-top: 48px; + padding-left: 4px; + padding-right: 4px; +} + +.page-container { + padding-top: 10px; +} + +#searchText { + margin-top: 5px; + padding: 4px 4px; + font-size: 12pt; +} + +h5.title { + color: #2b5797; + font-weight: 400; + font-size: 18px; +} + +.w3-row .threequarter { + width: 75%; + float: left; +} + +.w3-row .quarter { + width: 25%; + float: left; +} + +#form-login { + width: 600px; +} + +.w3-button.w3-edit { + background-color: #f1f1f1; +} + +.w3-button.w3-edit:hover { + background-color: #2b5797 !important; +} + +.w3-button.w3-delete { + background-color: #f1f1f1; +} + +.w3-button.w3-delete:hover { + background-color: #b91d47 !important; +} + +.fields { + margin-top: 20px; + margin-bottom: 20px; +} + +.fields li { + padding-left: 0; +} + +.hidden { + display: none; +} + +.accordion { + cursor: pointer; +} + +.footerNavbar-container { + position: fixed; + bottom: 5px; + width: 100%; + padding-right: 8px; +} + +.footerNavbar { + overflow: hidden; + width: 100%; + background-color: #2b5797; +} + +.footerNavbar .w3-bar-item { + padding: 3px; +} + +.footerNavbar .w3-bar-item p { + margin-top: 0; + margin-bottom: 0; + font-size: 10pt; +} + +.footerNavbar .w3-btn { + padding: 6px 4px; +} + +#searchSidebar { + display: none; +} + +#overlay { + position: fixed; + display: none; + width: 100%; + height: 100%; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: rgba(0, 0, 0, 0.5); + z-index: 4; + cursor: pointer; +} + +#message { + visibility: hidden; + min-width: 250px; + margin-left: -125px; + text-align: center; + border-radius: 2px; + padding: 16px; + position: fixed; + z-index: 1; + left: 50%; + bottom: 36px; +} + +#message.show { + visibility: visible; +} + +.tag { + display: inline-block; +} + +.field-label { + font-weight: bold; +} + +.summary { + background-color: #fff; + padding: 4px +} + +.summary p { + padding: 0; + margin: 0; +} + +#page-top-bar { + z-index: 1; + height: 50px; +} + +#page-title-container { + margin-left: 8px; + padding: 0; + width: 100%; +} + +#page-title-container h5 { + white-space: nowrap; + overflow: hidden; +} + +#main-sidebar { + width: 300px; + z-index: 5; +} + +#types_menu, #settings_menu { + margin-left: 2px !important; +} + +#main-sidebar-content { + margin-top: 50px; +} + +tr.htmx-swapping td { + opacity: 0; + transition: opacity 1s ease-out; +} + +.label-checkbox { + top: 2px; + position: relative; + margin-left: 4px; +} + +#quickbox { + position: fixed; + display: none; + width: 100vw; + height: 100vh; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ddd; + z-index: 5; +} + +#quickbox-top-bar { + height: var(--quickbox-topbar-height); +} + +#quickbox-footer { + height: var(--quickbox-footer-height); + position:fixed; bottom:0; +} + +#quickbox-content { + height: calc(100vh - var(--quickbox-footer-height)); + overflow: auto; + display: flex; + flex-direction: column-reverse; +} + +#quickbox-content .w3-button { + padding: 6px 10px; +} + +#quickbox-content .buttons { + width: 32px; +} + +#quickbox-content .buttons :first-child { + margin-bottom: 4px; +} + +#quickbox-title-container { + width: 100%; + padding: 0; + margin-left: 8px; +} + +#quickbox-footer { + padding: 2px; +} + +#quickbox-footer .button { + width: 50px; + margin-left: 4px; +} + +#quickbox-send { + cursor: pointer; + padding: 14px 16px; +} + +#quickbox-footer .textarea { + padding-right: 4px; +} + +.quickbox-row { + margin-top: 4px; + margin-bottom: 4px; +} + +#quickbox-content .w3-row { + background-color: #fff; +} + +#quickbox-content div:nth-child(2n+1) { + background-color: #fafafa; +} + +#items_search, #all_items_search { + position: sticky; + top: 50px; + z-index: 2; + background-color: #ddd; + padding-top: 4px; + padding-bottom: 4px; +} + +.panel-search { + background-color: #fff; + padding: 4px; +} + +table.stickyheader thead { + position: sticky; + top: 50px; + z-index: 2; +} + +table.stickyheader.searchopened thead { + top: 180px; +} + +.input-container { + display: flex; + max-width: 100%; + overflow: hidden; +} + +.input-container .prefix { + margin-right: 8px; +} + +.input-container input { + flex-grow: 1; + border: none; + outline: none; + padding: 8px; +} + +.input-container:focus-within { + border-color: #777; +} + +/* Small */ +@media (max-width:600px) { + i { + font-size: 20px; + } + + fieldset { + margin-bottom: 10px; + } + + #quickbox-content { + padding-top: var(--quickbox-topbar-height); + } + + #message { + min-width: 100%; + margin-left: 0; + margin-right: 0; + left: 0; + } + + .page-container { + padding-bottom: 100px; + } + + #page-title i { + font-size: 20px; + } + + #searchBar #searchText { + width: 250px; + } + + #form-login { + width: 96%; + } + + #searchBar { + display: none; + } + + #searchSidebar { + display: block; + } + + .w3-table-all.responsive table, + .w3-table-all.responsive thead, + .w3-table-all.responsive tbody, + .w3-table-all.responsive th, + .w3-table-all.responsive td, + .w3-table-all.responsive tr { + display: block; + } + + .w3-table-all thead tr { + position: absolute; + top: -9999px; + left: -9999px; + } + + .w3-table-all.responsive tr { + margin-bottom: 10px; + border: 1px solid #ddd; + } + + .w3-table-all.responsive td { + border: none; + position: relative; + padding-left: 30%; + } + + .w3-table-all.responsive td.no-label { + padding-left: 6px; + } + + .w3-table-all.responsive td.title { + color: #2b5797; + font-weight: 400; + font-size: 18px; + } + + .w3-table-all.responsive td:before { + position: absolute; + left: 6px; + content: attr(data-label); + font-weight: bold; + } + + .w3-table-all.responsive td.no-label:before { + position: absolute; + left: 6px; + content: ""; + font-weight: bold; + } + + .w3-modal-full { + width: 100vw !important; + height: 100vh !important; + padding-top:0 !important; + background-color: #fff; + } + + .w3-modal-full .w3-modal-content { + margin:0 !important; + } +} + +@media (max-width:992px) { + + /* The switch - the box around the slider */ + .switch { + position: relative; + display: inline-block; + width: 46px; + height: 24px; + } + + /* Hide default HTML checkbox */ + .switch input { + opacity: 0; + width: 0; + height: 0; + } + + /* The slider */ + .slider { + position: absolute; + cursor: pointer; + top: 0; + left: 0; + right: 0; + bottom: 0; + background-color: #ccc; + -webkit-transition: .4s; + transition: .4s; + } + + .slider:before { + position: absolute; + content: ""; + height: 16px; + width: 16px; + left: 4px; + bottom: 4px; + background-color: white; + -webkit-transition: .4s; + transition: .4s; + } + + input:checked+.slider { + background-color: #2b5797; + } + + input:focus+.slider { + box-shadow: 0 0 1px #2b5797; + } + + input:checked+.slider:before { + -webkit-transform: translateX(22px); + -ms-transform: translateX(22px); + transform: translateX(22px); + } + + /* Rounded sliders */ + .slider.round { + border-radius: 24px; + } + + .slider.round:before { + border-radius: 50%; + } +} + +/* Medium */ +@media (max-width:992px) and (min-width:601px) { + #page-title-container h5 { + padding-left: 0px; + } +} + +/* Min medium */ +@media (min-width:601px) { + .home-card-summary { + height: 250px; + overflow: auto; + } + + #quickbox { + width: 400px; + position: fixed; + top: 50px; + left: calc(100vw - 420px); + height: calc(100vh - 50px); + background-color: #fff !important; + border-left: 2px solid #fff; + border-top: 2px solid #fff; + } + #quickbox-top-bar { + position: relative; + } + #quickbox-footer { + position: relative; + } + + #quickbox-content { + height: calc(100vh - var(--quickbox-footer-height) - var(--quickbox-footer-height) - 42px); + } + +} + +/* Large */ +@media (min-width:993px) { + .w3-row > .w3-half:first { + padding-right: 4px; + } + + .w3-row > .w3-half:nth-child(2) { + padding-left: 4px; + } + + #page-main { + padding-left: 300px; + } + + #page-top-bar { + padding-right: 300px; + } +} diff --git a/assets/static/easymde/easymde.min.css b/assets/static/easymde/easymde.min.css new file mode 100644 index 0000000..3b88351 --- /dev/null +++ b/assets/static/easymde/easymde.min.css @@ -0,0 +1,7 @@ +/** + * easymde v2.18.0 + * Copyright Jeroen Akkerman + * @link https://github.com/ionaru/easy-markdown-editor + * @license MIT + */ +.CodeMirror{font-family:monospace;height:300px;color:#000;direction:ltr}.CodeMirror-lines{padding:4px 0}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{padding:0 4px}.CodeMirror-gutter-filler,.CodeMirror-scrollbar-filler{background-color:#fff}.CodeMirror-gutters{border-right:1px solid #ddd;background-color:#f7f7f7;white-space:nowrap}.CodeMirror-linenumber{padding:0 3px 0 5px;min-width:20px;text-align:right;color:#999;white-space:nowrap}.CodeMirror-guttermarker{color:#000}.CodeMirror-guttermarker-subtle{color:#999}.CodeMirror-cursor{border-left:1px solid #000;border-right:none;width:0}.CodeMirror div.CodeMirror-secondarycursor{border-left:1px solid silver}.cm-fat-cursor .CodeMirror-cursor{width:auto;border:0!important;background:#7e7}.cm-fat-cursor div.CodeMirror-cursors{z-index:1}.cm-fat-cursor .CodeMirror-line::selection,.cm-fat-cursor .CodeMirror-line>span::selection,.cm-fat-cursor .CodeMirror-line>span>span::selection{background:0 0}.cm-fat-cursor .CodeMirror-line::-moz-selection,.cm-fat-cursor .CodeMirror-line>span::-moz-selection,.cm-fat-cursor .CodeMirror-line>span>span::-moz-selection{background:0 0}.cm-fat-cursor{caret-color:transparent}@-moz-keyframes blink{50%{background-color:transparent}}@-webkit-keyframes blink{50%{background-color:transparent}}@keyframes blink{50%{background-color:transparent}}.cm-tab{display:inline-block;text-decoration:inherit}.CodeMirror-rulers{position:absolute;left:0;right:0;top:-50px;bottom:0;overflow:hidden}.CodeMirror-ruler{border-left:1px solid #ccc;top:0;bottom:0;position:absolute}.cm-s-default .cm-header{color:#00f}.cm-s-default .cm-quote{color:#090}.cm-negative{color:#d44}.cm-positive{color:#292}.cm-header,.cm-strong{font-weight:700}.cm-em{font-style:italic}.cm-link{text-decoration:underline}.cm-strikethrough{text-decoration:line-through}.cm-s-default .cm-keyword{color:#708}.cm-s-default .cm-atom{color:#219}.cm-s-default .cm-number{color:#164}.cm-s-default .cm-def{color:#00f}.cm-s-default .cm-variable-2{color:#05a}.cm-s-default .cm-type,.cm-s-default .cm-variable-3{color:#085}.cm-s-default .cm-comment{color:#a50}.cm-s-default .cm-string{color:#a11}.cm-s-default .cm-string-2{color:#f50}.cm-s-default .cm-meta{color:#555}.cm-s-default .cm-qualifier{color:#555}.cm-s-default .cm-builtin{color:#30a}.cm-s-default .cm-bracket{color:#997}.cm-s-default .cm-tag{color:#170}.cm-s-default .cm-attribute{color:#00c}.cm-s-default .cm-hr{color:#999}.cm-s-default .cm-link{color:#00c}.cm-s-default .cm-error{color:red}.cm-invalidchar{color:red}.CodeMirror-composing{border-bottom:2px solid}div.CodeMirror span.CodeMirror-matchingbracket{color:#0b0}div.CodeMirror span.CodeMirror-nonmatchingbracket{color:#a22}.CodeMirror-matchingtag{background:rgba(255,150,0,.3)}.CodeMirror-activeline-background{background:#e8f2ff}.CodeMirror{position:relative;overflow:hidden;background:#fff}.CodeMirror-scroll{overflow:scroll!important;margin-bottom:-50px;margin-right:-50px;padding-bottom:50px;height:100%;outline:0;position:relative;z-index:0}.CodeMirror-sizer{position:relative;border-right:50px solid transparent}.CodeMirror-gutter-filler,.CodeMirror-hscrollbar,.CodeMirror-scrollbar-filler,.CodeMirror-vscrollbar{position:absolute;z-index:6;display:none;outline:0}.CodeMirror-vscrollbar{right:0;top:0;overflow-x:hidden;overflow-y:scroll}.CodeMirror-hscrollbar{bottom:0;left:0;overflow-y:hidden;overflow-x:scroll}.CodeMirror-scrollbar-filler{right:0;bottom:0}.CodeMirror-gutter-filler{left:0;bottom:0}.CodeMirror-gutters{position:absolute;left:0;top:0;min-height:100%;z-index:3}.CodeMirror-gutter{white-space:normal;height:100%;display:inline-block;vertical-align:top;margin-bottom:-50px}.CodeMirror-gutter-wrapper{position:absolute;z-index:4;background:0 0!important;border:none!important}.CodeMirror-gutter-background{position:absolute;top:0;bottom:0;z-index:4}.CodeMirror-gutter-elt{position:absolute;cursor:default;z-index:4}.CodeMirror-gutter-wrapper ::selection{background-color:transparent}.CodeMirror-gutter-wrapper ::-moz-selection{background-color:transparent}.CodeMirror-lines{cursor:text;min-height:1px}.CodeMirror pre.CodeMirror-line,.CodeMirror pre.CodeMirror-line-like{-moz-border-radius:0;-webkit-border-radius:0;border-radius:0;border-width:0;background:0 0;font-family:inherit;font-size:inherit;margin:0;white-space:pre;word-wrap:normal;line-height:inherit;color:inherit;z-index:2;position:relative;overflow:visible;-webkit-tap-highlight-color:transparent;-webkit-font-variant-ligatures:contextual;font-variant-ligatures:contextual}.CodeMirror-wrap pre.CodeMirror-line,.CodeMirror-wrap pre.CodeMirror-line-like{word-wrap:break-word;white-space:pre-wrap;word-break:normal}.CodeMirror-linebackground{position:absolute;left:0;right:0;top:0;bottom:0;z-index:0}.CodeMirror-linewidget{position:relative;z-index:2;padding:.1px}.CodeMirror-rtl pre{direction:rtl}.CodeMirror-code{outline:0}.CodeMirror-gutter,.CodeMirror-gutters,.CodeMirror-linenumber,.CodeMirror-scroll,.CodeMirror-sizer{-moz-box-sizing:content-box;box-sizing:content-box}.CodeMirror-measure{position:absolute;width:100%;height:0;overflow:hidden;visibility:hidden}.CodeMirror-cursor{position:absolute;pointer-events:none}.CodeMirror-measure pre{position:static}div.CodeMirror-cursors{visibility:hidden;position:relative;z-index:3}div.CodeMirror-dragcursors{visibility:visible}.CodeMirror-focused div.CodeMirror-cursors{visibility:visible}.CodeMirror-selected{background:#d9d9d9}.CodeMirror-focused .CodeMirror-selected{background:#d7d4f0}.CodeMirror-crosshair{cursor:crosshair}.CodeMirror-line::selection,.CodeMirror-line>span::selection,.CodeMirror-line>span>span::selection{background:#d7d4f0}.CodeMirror-line::-moz-selection,.CodeMirror-line>span::-moz-selection,.CodeMirror-line>span>span::-moz-selection{background:#d7d4f0}.cm-searching{background-color:#ffa;background-color:rgba(255,255,0,.4)}.cm-force-border{padding-right:.1px}@media print{.CodeMirror div.CodeMirror-cursors{visibility:hidden}}.cm-tab-wrap-hack:after{content:''}span.CodeMirror-selectedtext{background:0 0}.EasyMDEContainer{display:block}.CodeMirror-rtl pre{direction:rtl}.EasyMDEContainer.sided--no-fullscreen{display:flex;flex-direction:row;flex-wrap:wrap}.EasyMDEContainer .CodeMirror{box-sizing:border-box;height:auto;border:1px solid #ced4da;border-bottom-left-radius:4px;border-bottom-right-radius:4px;padding:10px;font:inherit;z-index:0;word-wrap:break-word}.EasyMDEContainer .CodeMirror-scroll{cursor:text}.EasyMDEContainer .CodeMirror-fullscreen{background:#fff;position:fixed!important;top:50px;left:0;right:0;bottom:0;height:auto;z-index:8;border-right:none!important;border-bottom-right-radius:0!important}.EasyMDEContainer .CodeMirror-sided{width:50%!important}.EasyMDEContainer.sided--no-fullscreen .CodeMirror-sided{border-right:none!important;border-bottom-right-radius:0;position:relative;flex:1 1 auto}.EasyMDEContainer .CodeMirror-placeholder{opacity:.5}.EasyMDEContainer .CodeMirror-focused .CodeMirror-selected{background:#d9d9d9}.editor-toolbar{position:relative;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;-o-user-select:none;user-select:none;padding:9px 10px;border-top:1px solid #ced4da;border-left:1px solid #ced4da;border-right:1px solid #ced4da;border-top-left-radius:4px;border-top-right-radius:4px}.editor-toolbar.fullscreen{width:100%;height:50px;padding-top:10px;padding-bottom:10px;box-sizing:border-box;background:#fff;border:0;position:fixed;top:0;left:0;opacity:1;z-index:9}.editor-toolbar.fullscreen::before{width:20px;height:50px;background:-moz-linear-gradient(left,#fff 0,rgba(255,255,255,0) 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0,#fff),color-stop(100%,rgba(255,255,255,0)));background:-webkit-linear-gradient(left,#fff 0,rgba(255,255,255,0) 100%);background:-o-linear-gradient(left,#fff 0,rgba(255,255,255,0) 100%);background:-ms-linear-gradient(left,#fff 0,rgba(255,255,255,0) 100%);background:linear-gradient(to right,#fff 0,rgba(255,255,255,0) 100%);position:fixed;top:0;left:0;margin:0;padding:0}.editor-toolbar.fullscreen::after{width:20px;height:50px;background:-moz-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-webkit-gradient(linear,left top,right top,color-stop(0,rgba(255,255,255,0)),color-stop(100%,#fff));background:-webkit-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-o-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:-ms-linear-gradient(left,rgba(255,255,255,0) 0,#fff 100%);background:linear-gradient(to right,rgba(255,255,255,0) 0,#fff 100%);position:fixed;top:0;right:0;margin:0;padding:0}.EasyMDEContainer.sided--no-fullscreen .editor-toolbar{width:100%}.editor-toolbar .easymde-dropdown,.editor-toolbar button{background:0 0;display:inline-block;text-align:center;text-decoration:none!important;height:30px;margin:0;padding:0;border:1px solid transparent;border-radius:3px;cursor:pointer}.editor-toolbar button{font-weight:700;min-width:30px;padding:0 6px;white-space:nowrap}.editor-toolbar button.active,.editor-toolbar button:hover{background:#fcfcfc;border-color:#95a5a6}.editor-toolbar i.separator{display:inline-block;width:0;border-left:1px solid #d9d9d9;border-right:1px solid #fff;color:transparent;text-indent:-10px;margin:0 6px}.editor-toolbar button:after{font-family:Arial,"Helvetica Neue",Helvetica,sans-serif;font-size:65%;vertical-align:text-bottom;position:relative;top:2px}.editor-toolbar button.heading-1:after{content:"1"}.editor-toolbar button.heading-2:after{content:"2"}.editor-toolbar button.heading-3:after{content:"3"}.editor-toolbar button.heading-bigger:after{content:"▲"}.editor-toolbar button.heading-smaller:after{content:"▼"}.editor-toolbar.disabled-for-preview button:not(.no-disable){opacity:.6;pointer-events:none}@media only screen and (max-width:700px){.editor-toolbar i.no-mobile{display:none}}.editor-statusbar{padding:8px 10px;font-size:12px;color:#959694;text-align:right}.EasyMDEContainer.sided--no-fullscreen .editor-statusbar{width:100%}.editor-statusbar span{display:inline-block;min-width:4em;margin-left:1em}.editor-statusbar .lines:before{content:'lines: '}.editor-statusbar .words:before{content:'words: '}.editor-statusbar .characters:before{content:'characters: '}.editor-preview-full{position:absolute;width:100%;height:100%;top:0;left:0;z-index:7;overflow:auto;display:none;box-sizing:border-box}.editor-preview-side{position:fixed;bottom:0;width:50%;top:50px;right:0;z-index:9;overflow:auto;display:none;box-sizing:border-box;border:1px solid #ddd;word-wrap:break-word}.editor-preview-active-side{display:block}.EasyMDEContainer.sided--no-fullscreen .editor-preview-active-side{flex:1 1 auto;height:auto;position:static}.editor-preview-active{display:block}.editor-preview{padding:10px;background:#fafafa}.editor-preview>p{margin-top:0}.editor-preview pre{background:#eee;margin-bottom:10px}.editor-preview table td,.editor-preview table th{border:1px solid #ddd;padding:5px}.cm-s-easymde .cm-tag{color:#63a35c}.cm-s-easymde .cm-attribute{color:#795da3}.cm-s-easymde .cm-string{color:#183691}.cm-s-easymde .cm-header-1{font-size:calc(1.375rem + 1.5vw)}.cm-s-easymde .cm-header-2{font-size:calc(1.325rem + .9vw)}.cm-s-easymde .cm-header-3{font-size:calc(1.3rem + .6vw)}.cm-s-easymde .cm-header-4{font-size:calc(1.275rem + .3vw)}.cm-s-easymde .cm-header-5{font-size:1.25rem}.cm-s-easymde .cm-header-6{font-size:1rem}.cm-s-easymde .cm-header-1,.cm-s-easymde .cm-header-2,.cm-s-easymde .cm-header-3,.cm-s-easymde .cm-header-4,.cm-s-easymde .cm-header-5,.cm-s-easymde .cm-header-6{margin-bottom:.5rem;line-height:1.2}.cm-s-easymde .cm-comment{background:rgba(0,0,0,.05);border-radius:2px}.cm-s-easymde .cm-link{color:#7f8c8d}.cm-s-easymde .cm-url{color:#aab2b3}.cm-s-easymde .cm-quote{color:#7f8c8d;font-style:italic}.editor-toolbar .easymde-dropdown{position:relative;background:linear-gradient(to bottom right,#fff 0,#fff 84%,#333 50%,#333 100%);border-radius:0;border:1px solid #fff}.editor-toolbar .easymde-dropdown:hover{background:linear-gradient(to bottom right,#fff 0,#fff 84%,#333 50%,#333 100%)}.easymde-dropdown-content{display:block;visibility:hidden;position:absolute;background-color:#f9f9f9;box-shadow:0 8px 16px 0 rgba(0,0,0,.2);padding:8px;z-index:2;top:30px}.easymde-dropdown:active .easymde-dropdown-content,.easymde-dropdown:focus .easymde-dropdown-content,.easymde-dropdown:focus-within .easymde-dropdown-content{visibility:visible}.easymde-dropdown-content button{display:block}span[data-img-src]::after{content:'';background-image:var(--bg-image);display:block;max-height:100%;max-width:100%;background-size:contain;height:0;padding-top:var(--height);width:var(--width);background-repeat:no-repeat}.CodeMirror .cm-spell-error:not(.cm-url):not(.cm-comment):not(.cm-tag):not(.cm-word){background:rgba(255,0,0,.15)} \ No newline at end of file diff --git a/assets/static/easymde/easymde.min.js b/assets/static/easymde/easymde.min.js new file mode 100644 index 0000000..17f6da9 --- /dev/null +++ b/assets/static/easymde/easymde.min.js @@ -0,0 +1,7 @@ +/** + * easymde v2.18.0 + * Copyright Jeroen Akkerman + * @link https://github.com/ionaru/easy-markdown-editor + * @license MIT + */ +!function(e){if("object"==typeof exports&&"undefined"!=typeof module)module.exports=e();else if("function"==typeof define&&define.amd)define([],e);else{("undefined"!=typeof window?window:"undefined"!=typeof global?global:"undefined"!=typeof self?self:this).EasyMDE=e()}}((function(){return function e(t,n,i){function r(a,l){if(!n[a]){if(!t[a]){var s="function"==typeof require&&require;if(!l&&s)return s(a,!0);if(o)return o(a,!0);var u=new Error("Cannot find module '"+a+"'");throw u.code="MODULE_NOT_FOUND",u}var c=n[a]={exports:{}};t[a][0].call(c.exports,(function(e){return r(t[a][1][e]||e)}),c,c.exports,e,t,n,i)}return n[a].exports}for(var o="function"==typeof require&&require,a=0;a[> ]*|[*+-] \[[x ]\]\s|[*+-]\s|(\d+)([.)]))(\s*)/,n=/^(\s*)(>[> ]*|[*+-] \[[x ]\]|[*+-]|(\d+)[.)])(\s*)$/,i=/[*+-]\s/;function r(e,n){var i=n.line,r=0,o=0,a=t.exec(e.getLine(i)),l=a[1];do{var s=i+(r+=1),u=e.getLine(s),c=t.exec(u);if(c){var d=c[1],h=parseInt(a[3],10)+r-o,f=parseInt(c[3],10),p=f;if(l!==d||isNaN(f)){if(l.length>d.length)return;if(l.lengthf&&(p=h+1),e.replaceRange(u.replace(t,d+p+c[4]+c[5]),{line:s,ch:0},{line:s,ch:u.length})}}while(c)}e.commands.newlineAndIndentContinueMarkdownList=function(o){if(o.getOption("disableInput"))return e.Pass;for(var a=o.listSelections(),l=[],s=0;s\s*$/.test(p),x=!/>\s*$/.test(p);(v||x)&&o.replaceRange("",{line:u.line,ch:0},{line:u.line,ch:u.ch+1}),l[s]="\n"}else{var y=m[1],b=m[5],D=!(i.test(m[2])||m[2].indexOf(">")>=0),C=D?parseInt(m[3],10)+1+m[4]:m[2].replace("x"," ");l[s]="\n"+y+C+b,D&&r(o,u)}}o.replaceSelections(l)}})("object"==typeof n&&"object"==typeof t?e("../../lib/codemirror"):CodeMirror)},{"../../lib/codemirror":10}],7:[function(e,t,n){(function(e){"use strict";e.overlayMode=function(t,n,i){return{startState:function(){return{base:e.startState(t),overlay:e.startState(n),basePos:0,baseCur:null,overlayPos:0,overlayCur:null,streamSeen:null}},copyState:function(i){return{base:e.copyState(t,i.base),overlay:e.copyState(n,i.overlay),basePos:i.basePos,baseCur:null,overlayPos:i.overlayPos,overlayCur:null}},token:function(e,r){return(e!=r.streamSeen||Math.min(r.basePos,r.overlayPos)c);d++){var h=e.getLine(u++);l=null==l?h:l+"\n"+h}s*=2,t.lastIndex=n.ch;var f=t.exec(l);if(f){var p=l.slice(0,f.index).split("\n"),m=f[0].split("\n"),g=n.line+p.length-1,v=p[p.length-1].length;return{from:i(g,v),to:i(g+m.length-1,1==m.length?v+m[0].length:m[m.length-1].length),match:f}}}}function s(e,t,n){for(var i,r=0;r<=e.length;){t.lastIndex=r;var o=t.exec(e);if(!o)break;var a=o.index+o[0].length;if(a>e.length-n)break;(!i||a>i.index+i[0].length)&&(i=o),r=o.index+1}return i}function u(e,t,n){t=r(t,"g");for(var o=n.line,a=n.ch,l=e.firstLine();o>=l;o--,a=-1){var u=e.getLine(o),c=s(u,t,a<0?0:u.length-a);if(c)return{from:i(o,c.index),to:i(o,c.index+c[0].length),match:c}}}function c(e,t,n){if(!o(t))return u(e,t,n);t=r(t,"gm");for(var a,l=1,c=e.getLine(n.line).length-n.ch,d=n.line,h=e.firstLine();d>=h;){for(var f=0;f=h;f++){var p=e.getLine(d--);a=null==a?p:p+"\n"+a}l*=2;var m=s(a,t,c);if(m){var g=a.slice(0,m.index).split("\n"),v=m[0].split("\n"),x=d+g.length,y=g[g.length-1].length;return{from:i(x,y),to:i(x+v.length-1,1==v.length?y+v[0].length:v[v.length-1].length),match:m}}}}function d(e,t,n,i){if(e.length==t.length)return n;for(var r=0,o=n+Math.max(0,e.length-t.length);;){if(r==o)return r;var a=r+o>>1,l=i(e.slice(0,a)).length;if(l==n)return a;l>n?o=a:r=a+1}}function h(e,r,o,a){if(!r.length)return null;var l=a?t:n,s=l(r).split(/\r|\n\r?/);e:for(var u=o.line,c=o.ch,h=e.lastLine()+1-s.length;u<=h;u++,c=0){var f=e.getLine(u).slice(c),p=l(f);if(1==s.length){var m=p.indexOf(s[0]);if(-1==m)continue e;return o=d(f,p,m,l)+c,{from:i(u,d(f,p,m,l)+c),to:i(u,d(f,p,m+s[0].length,l)+c)}}var g=p.length-s[0].length;if(p.slice(g)==s[0]){for(var v=1;v=h;u--,c=-1){var f=e.getLine(u);c>-1&&(f=f.slice(0,c));var p=l(f);if(1==s.length){var m=p.lastIndexOf(s[0]);if(-1==m)continue e;return{from:i(u,d(f,p,m,l)),to:i(u,d(f,p,m+s[0].length,l))}}var g=s[s.length-1];if(p.slice(0,g.length)==g){var v=1;for(o=u-s.length+1;v(this.doc.getLine(n.line)||"").length&&(n.ch=0,n.line++)),0!=e.cmpPos(n,this.doc.clipPos(n))))return this.atOccurrence=!1;var r=this.matches(t,n);if(this.afterEmptyMatch=r&&0==e.cmpPos(r.from,r.to),r)return this.pos=r,this.atOccurrence=!0,this.pos.match||!0;var o=i(t?this.doc.firstLine():this.doc.lastLine()+1,0);return this.pos={from:o,to:o},this.atOccurrence=!1},from:function(){if(this.atOccurrence)return this.pos.from},to:function(){if(this.atOccurrence)return this.pos.to},replace:function(t,n){if(this.atOccurrence){var r=e.splitLines(t);this.doc.replaceRange(r,this.pos.from,this.pos.to,n),this.pos.to=i(this.pos.from.line+r.length-1,r[r.length-1].length+(1==r.length?this.pos.from.ch:0))}}},e.defineExtension("getSearchCursor",(function(e,t,n){return new p(this.doc,e,t,n)})),e.defineDocExtension("getSearchCursor",(function(e,t,n){return new p(this,e,t,n)})),e.defineExtension("selectMatches",(function(t,n){for(var i=[],r=this.getSearchCursor(t,this.getCursor("from"),n);r.findNext()&&!(e.cmpPos(r.to(),this.getCursor("to"))>0);)i.push({anchor:r.from(),head:r.to()});i.length&&this.setSelections(i,0)}))})("object"==typeof n&&"object"==typeof t?e("../../lib/codemirror"):CodeMirror)},{"../../lib/codemirror":10}],9:[function(e,t,n){(function(e){"use strict";function t(e){e.state.markedSelection&&e.operation((function(){!function(e){if(!e.somethingSelected())return a(e);if(e.listSelections().length>1)return l(e);var t=e.getCursor("start"),n=e.getCursor("end"),i=e.state.markedSelection;if(!i.length)return o(e,t,n);var s=i[0].find(),u=i[i.length-1].find();if(!s||!u||n.line-t.line<=8||r(t,u.to)>=0||r(n,s.from)<=0)return l(e);for(;r(t,s.from)>0;)i.shift().clear(),s=i[0].find();for(r(t,s.from)<0&&(s.to.line-t.line<8?(i.shift().clear(),o(e,t,s.to,0)):o(e,t,s.from,0));r(n,u.to)<0;)i.pop().clear(),u=i[i.length-1].find();r(n,u.to)>0&&(n.line-u.from.line<8?(i.pop().clear(),o(e,u.from,n)):o(e,u.to,n))}(e)}))}function n(e){e.state.markedSelection&&e.state.markedSelection.length&&e.operation((function(){a(e)}))}e.defineOption("styleSelectedText",!1,(function(i,r,o){var s=o&&o!=e.Init;r&&!s?(i.state.markedSelection=[],i.state.markedSelectionStyle="string"==typeof r?r:"CodeMirror-selectedtext",l(i),i.on("cursorActivity",t),i.on("change",n)):!r&&s&&(i.off("cursorActivity",t),i.off("change",n),a(i),i.state.markedSelection=i.state.markedSelectionStyle=null)}));var i=e.Pos,r=e.cmpPos;function o(e,t,n,o){if(0!=r(t,n))for(var a=e.state.markedSelection,l=e.state.markedSelectionStyle,s=t.line;;){var u=s==t.line?t:i(s,0),c=s+8,d=c>=n.line,h=d?n:i(c,0),f=e.markText(u,h,{className:l});if(null==o?a.push(f):a.splice(o++,0,f),d)break;s=c}}function a(e){for(var t=e.state.markedSelection,n=0;n2),v=/Android/.test(e),x=g||v||/webOS|BlackBerry|Opera Mini|Opera Mobi|IEMobile/i.test(e),y=g||/Mac/.test(t),b=/\bCrOS\b/.test(e),D=/win/i.test(t),C=h&&e.match(/Version\/(\d*\.\d*)/);C&&(C=Number(C[1])),C&&C>=15&&(h=!1,s=!0);var w=y&&(u||h&&(null==C||C<12.11)),k=n||a&&l>=9;function S(e){return new RegExp("(^|\\s)"+e+"(?:$|\\s)\\s*")}var F,A=function(e,t){var n=e.className,i=S(t).exec(n);if(i){var r=n.slice(i.index+i[0].length);e.className=n.slice(0,i.index)+(r?i[1]+r:"")}};function E(e){for(var t=e.childNodes.length;t>0;--t)e.removeChild(e.firstChild);return e}function L(e,t){return E(e).appendChild(t)}function T(e,t,n,i){var r=document.createElement(e);if(n&&(r.className=n),i&&(r.style.cssText=i),"string"==typeof t)r.appendChild(document.createTextNode(t));else if(t)for(var o=0;o=t)return a+(t-o);a+=l-o,a+=n-a%n,o=l+1}}g?z=function(e){e.selectionStart=0,e.selectionEnd=e.value.length}:a&&(z=function(e){try{e.select()}catch(e){}});var j=function(){this.id=null,this.f=null,this.time=0,this.handler=P(this.onTimeout,this)};function q(e,t){for(var n=0;n=t)return i+Math.min(a,t-r);if(r+=o-i,i=o+1,(r+=n-r%n)>=t)return i}}var K=[""];function Z(e){for(;K.length<=e;)K.push(Y(K)+" ");return K[e]}function Y(e){return e[e.length-1]}function Q(e,t){for(var n=[],i=0;i"€"&&(e.toUpperCase()!=e.toLowerCase()||te.test(e))}function ie(e,t){return t?!!(t.source.indexOf("\\w")>-1&&ne(e))||t.test(e):ne(e)}function re(e){for(var t in e)if(e.hasOwnProperty(t)&&e[t])return!1;return!0}var oe=/[\u0300-\u036f\u0483-\u0489\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u065e\u0670\u06d6-\u06dc\u06de-\u06e4\u06e7\u06e8\u06ea-\u06ed\u0711\u0730-\u074a\u07a6-\u07b0\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0900-\u0902\u093c\u0941-\u0948\u094d\u0951-\u0955\u0962\u0963\u0981\u09bc\u09be\u09c1-\u09c4\u09cd\u09d7\u09e2\u09e3\u0a01\u0a02\u0a3c\u0a41\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a70\u0a71\u0a75\u0a81\u0a82\u0abc\u0ac1-\u0ac5\u0ac7\u0ac8\u0acd\u0ae2\u0ae3\u0b01\u0b3c\u0b3e\u0b3f\u0b41-\u0b44\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b82\u0bbe\u0bc0\u0bcd\u0bd7\u0c3e-\u0c40\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0cbc\u0cbf\u0cc2\u0cc6\u0ccc\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0d3e\u0d41-\u0d44\u0d4d\u0d57\u0d62\u0d63\u0dca\u0dcf\u0dd2-\u0dd4\u0dd6\u0ddf\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0f18\u0f19\u0f35\u0f37\u0f39\u0f71-\u0f7e\u0f80-\u0f84\u0f86\u0f87\u0f90-\u0f97\u0f99-\u0fbc\u0fc6\u102d-\u1030\u1032-\u1037\u1039\u103a\u103d\u103e\u1058\u1059\u105e-\u1060\u1071-\u1074\u1082\u1085\u1086\u108d\u109d\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b7-\u17bd\u17c6\u17c9-\u17d3\u17dd\u180b-\u180d\u18a9\u1920-\u1922\u1927\u1928\u1932\u1939-\u193b\u1a17\u1a18\u1a56\u1a58-\u1a5e\u1a60\u1a62\u1a65-\u1a6c\u1a73-\u1a7c\u1a7f\u1b00-\u1b03\u1b34\u1b36-\u1b3a\u1b3c\u1b42\u1b6b-\u1b73\u1b80\u1b81\u1ba2-\u1ba5\u1ba8\u1ba9\u1c2c-\u1c33\u1c36\u1c37\u1cd0-\u1cd2\u1cd4-\u1ce0\u1ce2-\u1ce8\u1ced\u1dc0-\u1de6\u1dfd-\u1dff\u200c\u200d\u20d0-\u20f0\u2cef-\u2cf1\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua66f-\ua672\ua67c\ua67d\ua6f0\ua6f1\ua802\ua806\ua80b\ua825\ua826\ua8c4\ua8e0-\ua8f1\ua926-\ua92d\ua947-\ua951\ua980-\ua982\ua9b3\ua9b6-\ua9b9\ua9bc\uaa29-\uaa2e\uaa31\uaa32\uaa35\uaa36\uaa43\uaa4c\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uabe5\uabe8\uabed\udc00-\udfff\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\uff9e\uff9f]/;function ae(e){return e.charCodeAt(0)>=768&&oe.test(e)}function le(e,t,n){for(;(n<0?t>0:tn?-1:1;;){if(t==n)return t;var r=(t+n)/2,o=i<0?Math.ceil(r):Math.floor(r);if(o==t)return e(o)?t:n;e(o)?n=o:t=o+i}}var ue=null;function ce(e,t,n){var i;ue=null;for(var r=0;rt)return r;o.to==t&&(o.from!=o.to&&"before"==n?i=r:ue=r),o.from==t&&(o.from!=o.to&&"before"!=n?i=r:ue=r)}return null!=i?i:ue}var de=function(){var e=/[\u0590-\u05f4\u0600-\u06ff\u0700-\u08ac]/,t=/[stwN]/,n=/[LRr]/,i=/[Lb1n]/,r=/[1n]/;function o(e,t,n){this.level=e,this.from=t,this.to=n}return function(a,l){var s="ltr"==l?"L":"R";if(0==a.length||"ltr"==l&&!e.test(a))return!1;for(var u,c=a.length,d=[],h=0;h-1&&(i[t]=r.slice(0,o).concat(r.slice(o+1)))}}}function ve(e,t){var n=me(e,t);if(n.length)for(var i=Array.prototype.slice.call(arguments,2),r=0;r0}function De(e){e.prototype.on=function(e,t){pe(this,e,t)},e.prototype.off=function(e,t){ge(this,e,t)}}function Ce(e){e.preventDefault?e.preventDefault():e.returnValue=!1}function we(e){e.stopPropagation?e.stopPropagation():e.cancelBubble=!0}function ke(e){return null!=e.defaultPrevented?e.defaultPrevented:0==e.returnValue}function Se(e){Ce(e),we(e)}function Fe(e){return e.target||e.srcElement}function Ae(e){var t=e.which;return null==t&&(1&e.button?t=1:2&e.button?t=3:4&e.button&&(t=2)),y&&e.ctrlKey&&1==t&&(t=3),t}var Ee,Le,Te=function(){if(a&&l<9)return!1;var e=T("div");return"draggable"in e||"dragDrop"in e}();function Me(e){if(null==Ee){var t=T("span","​");L(e,T("span",[t,document.createTextNode("x")])),0!=e.firstChild.offsetHeight&&(Ee=t.offsetWidth<=1&&t.offsetHeight>2&&!(a&&l<8))}var n=Ee?T("span","​"):T("span"," ",null,"display: inline-block; width: 1px; margin-right: -1px");return n.setAttribute("cm-text",""),n}function Be(e){if(null!=Le)return Le;var t=L(e,document.createTextNode("AخA")),n=F(t,0,1).getBoundingClientRect(),i=F(t,1,2).getBoundingClientRect();return E(e),!(!n||n.left==n.right)&&(Le=i.right-n.right<3)}var Ne,Oe=3!="\n\nb".split(/\n/).length?function(e){for(var t=0,n=[],i=e.length;t<=i;){var r=e.indexOf("\n",t);-1==r&&(r=e.length);var o=e.slice(t,"\r"==e.charAt(r-1)?r-1:r),a=o.indexOf("\r");-1!=a?(n.push(o.slice(0,a)),t+=a+1):(n.push(o),t=r+1)}return n}:function(e){return e.split(/\r\n?|\n/)},Ie=window.getSelection?function(e){try{return e.selectionStart!=e.selectionEnd}catch(e){return!1}}:function(e){var t;try{t=e.ownerDocument.selection.createRange()}catch(e){}return!(!t||t.parentElement()!=e)&&0!=t.compareEndPoints("StartToEnd",t)},ze="oncopy"in(Ne=T("div"))||(Ne.setAttribute("oncopy","return;"),"function"==typeof Ne.oncopy),He=null;var Re={},Pe={};function _e(e,t){arguments.length>2&&(t.dependencies=Array.prototype.slice.call(arguments,2)),Re[e]=t}function We(e){if("string"==typeof e&&Pe.hasOwnProperty(e))e=Pe[e];else if(e&&"string"==typeof e.name&&Pe.hasOwnProperty(e.name)){var t=Pe[e.name];"string"==typeof t&&(t={name:t}),(e=ee(t,e)).name=t.name}else{if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+xml$/.test(e))return We("application/xml");if("string"==typeof e&&/^[\w\-]+\/[\w\-]+\+json$/.test(e))return We("application/json")}return"string"==typeof e?{name:e}:e||{name:"null"}}function je(e,t){t=We(t);var n=Re[t.name];if(!n)return je(e,"text/plain");var i=n(e,t);if(qe.hasOwnProperty(t.name)){var r=qe[t.name];for(var o in r)r.hasOwnProperty(o)&&(i.hasOwnProperty(o)&&(i["_"+o]=i[o]),i[o]=r[o])}if(i.name=t.name,t.helperType&&(i.helperType=t.helperType),t.modeProps)for(var a in t.modeProps)i[a]=t.modeProps[a];return i}var qe={};function Ue(e,t){_(t,qe.hasOwnProperty(e)?qe[e]:qe[e]={})}function $e(e,t){if(!0===t)return t;if(e.copyState)return e.copyState(t);var n={};for(var i in t){var r=t[i];r instanceof Array&&(r=r.concat([])),n[i]=r}return n}function Ge(e,t){for(var n;e.innerMode&&(n=e.innerMode(t))&&n.mode!=e;)t=n.state,e=n.mode;return n||{mode:e,state:t}}function Ve(e,t,n){return!e.startState||e.startState(t,n)}var Xe=function(e,t,n){this.pos=this.start=0,this.string=e,this.tabSize=t||8,this.lastColumnPos=this.lastColumnValue=0,this.lineStart=0,this.lineOracle=n};function Ke(e,t){if((t-=e.first)<0||t>=e.size)throw new Error("There is no line "+(t+e.first)+" in the document.");for(var n=e;!n.lines;)for(var i=0;;++i){var r=n.children[i],o=r.chunkSize();if(t=e.first&&tn?it(n,Ke(e,n).text.length):function(e,t){var n=e.ch;return null==n||n>t?it(e.line,t):n<0?it(e.line,0):e}(t,Ke(e,t.line).text.length)}function dt(e,t){for(var n=[],i=0;i=this.string.length},Xe.prototype.sol=function(){return this.pos==this.lineStart},Xe.prototype.peek=function(){return this.string.charAt(this.pos)||void 0},Xe.prototype.next=function(){if(this.post},Xe.prototype.eatSpace=function(){for(var e=this.pos;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e},Xe.prototype.skipToEnd=function(){this.pos=this.string.length},Xe.prototype.skipTo=function(e){var t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0},Xe.prototype.backUp=function(e){this.pos-=e},Xe.prototype.column=function(){return this.lastColumnPos0?null:(i&&!1!==t&&(this.pos+=i[0].length),i)}var r=function(e){return n?e.toLowerCase():e};if(r(this.string.substr(this.pos,e.length))==r(e))return!1!==t&&(this.pos+=e.length),!0},Xe.prototype.current=function(){return this.string.slice(this.start,this.pos)},Xe.prototype.hideFirstChars=function(e,t){this.lineStart+=e;try{return t()}finally{this.lineStart-=e}},Xe.prototype.lookAhead=function(e){var t=this.lineOracle;return t&&t.lookAhead(e)},Xe.prototype.baseToken=function(){var e=this.lineOracle;return e&&e.baseToken(this.pos)};var ht=function(e,t){this.state=e,this.lookAhead=t},ft=function(e,t,n,i){this.state=t,this.doc=e,this.line=n,this.maxLookAhead=i||0,this.baseTokens=null,this.baseTokenPos=1};function pt(e,t,n,i){var r=[e.state.modeGen],o={};wt(e,t.text,e.doc.mode,n,(function(e,t){return r.push(e,t)}),o,i);for(var a=n.state,l=function(i){n.baseTokens=r;var l=e.state.overlays[i],s=1,u=0;n.state=!0,wt(e,t.text,l.mode,n,(function(e,t){for(var n=s;ue&&r.splice(s,1,e,r[s+1],i),s+=2,u=Math.min(e,i)}if(t)if(l.opaque)r.splice(n,s-n,e,"overlay "+t),s=n+2;else for(;ne.options.maxHighlightLength&&$e(e.doc.mode,i.state),o=pt(e,t,i);r&&(i.state=r),t.stateAfter=i.save(!r),t.styles=o.styles,o.classes?t.styleClasses=o.classes:t.styleClasses&&(t.styleClasses=null),n===e.doc.highlightFrontier&&(e.doc.modeFrontier=Math.max(e.doc.modeFrontier,++e.doc.highlightFrontier))}return t.styles}function gt(e,t,n){var i=e.doc,r=e.display;if(!i.mode.startState)return new ft(i,!0,t);var o=function(e,t,n){for(var i,r,o=e.doc,a=n?-1:t-(e.doc.mode.innerMode?1e3:100),l=t;l>a;--l){if(l<=o.first)return o.first;var s=Ke(o,l-1),u=s.stateAfter;if(u&&(!n||l+(u instanceof ht?u.lookAhead:0)<=o.modeFrontier))return l;var c=W(s.text,null,e.options.tabSize);(null==r||i>c)&&(r=l-1,i=c)}return r}(e,t,n),a=o>i.first&&Ke(i,o-1).stateAfter,l=a?ft.fromSaved(i,a,o):new ft(i,Ve(i.mode),o);return i.iter(o,t,(function(n){vt(e,n.text,l);var i=l.line;n.stateAfter=i==t-1||i%5==0||i>=r.viewFrom&&it.start)return o}throw new Error("Mode "+e.name+" failed to advance stream.")}ft.prototype.lookAhead=function(e){var t=this.doc.getLine(this.line+e);return null!=t&&e>this.maxLookAhead&&(this.maxLookAhead=e),t},ft.prototype.baseToken=function(e){if(!this.baseTokens)return null;for(;this.baseTokens[this.baseTokenPos]<=e;)this.baseTokenPos+=2;var t=this.baseTokens[this.baseTokenPos+1];return{type:t&&t.replace(/( |^)overlay .*/,""),size:this.baseTokens[this.baseTokenPos]-e}},ft.prototype.nextLine=function(){this.line++,this.maxLookAhead>0&&this.maxLookAhead--},ft.fromSaved=function(e,t,n){return t instanceof ht?new ft(e,$e(e.mode,t.state),n,t.lookAhead):new ft(e,$e(e.mode,t),n)},ft.prototype.save=function(e){var t=!1!==e?$e(this.doc.mode,this.state):this.state;return this.maxLookAhead>0?new ht(t,this.maxLookAhead):t};var bt=function(e,t,n){this.start=e.start,this.end=e.pos,this.string=e.current(),this.type=t||null,this.state=n};function Dt(e,t,n,i){var r,o,a=e.doc,l=a.mode,s=Ke(a,(t=ct(a,t)).line),u=gt(e,t.line,n),c=new Xe(s.text,e.options.tabSize,u);for(i&&(o=[]);(i||c.pose.options.maxHighlightLength?(l=!1,a&&vt(e,t,i,d.pos),d.pos=t.length,s=null):s=Ct(yt(n,d,i.state,h),o),h){var f=h[0].name;f&&(s="m-"+(s?f+" "+s:f))}if(!l||c!=s){for(;u=t:o.to>t);(i||(i=[])).push(new Ft(a,o.from,l?null:o.to))}}return i}(n,r,a),s=function(e,t,n){var i;if(e)for(var r=0;r=t:o.to>t)||o.from==t&&"bookmark"==a.type&&(!n||o.marker.insertLeft)){var l=null==o.from||(a.inclusiveLeft?o.from<=t:o.from0&&l)for(var y=0;yt)&&(!n||It(n,o.marker)<0)&&(n=o.marker)}return n}function _t(e,t,n,i,r){var o=Ke(e,t),a=St&&o.markedSpans;if(a)for(var l=0;l=0&&d<=0||c<=0&&d>=0)&&(c<=0&&(s.marker.inclusiveRight&&r.inclusiveLeft?rt(u.to,n)>=0:rt(u.to,n)>0)||c>=0&&(s.marker.inclusiveRight&&r.inclusiveLeft?rt(u.from,i)<=0:rt(u.from,i)<0)))return!0}}}function Wt(e){for(var t;t=Ht(e);)e=t.find(-1,!0).line;return e}function jt(e,t){var n=Ke(e,t),i=Wt(n);return n==i?t:Je(i)}function qt(e,t){if(t>e.lastLine())return t;var n,i=Ke(e,t);if(!Ut(e,i))return t;for(;n=Rt(i);)i=n.find(1,!0).line;return Je(i)+1}function Ut(e,t){var n=St&&t.markedSpans;if(n)for(var i=void 0,r=0;rt.maxLineLength&&(t.maxLineLength=n,t.maxLine=e)}))}var Kt=function(e,t,n){this.text=e,Bt(this,t),this.height=n?n(this):1};function Zt(e){e.parent=null,Mt(e)}Kt.prototype.lineNo=function(){return Je(this)},De(Kt);var Yt={},Qt={};function Jt(e,t){if(!e||/^\s*$/.test(e))return null;var n=t.addModeClass?Qt:Yt;return n[e]||(n[e]=e.replace(/\S+/g,"cm-$&"))}function en(e,t){var n=M("span",null,null,s?"padding-right: .1px":null),i={pre:M("pre",[n],"CodeMirror-line"),content:n,col:0,pos:0,cm:e,trailingSpace:!1,splitSpaces:e.getOption("lineWrapping")};t.measure={};for(var r=0;r<=(t.rest?t.rest.length:0);r++){var o=r?t.rest[r-1]:t.line,a=void 0;i.pos=0,i.addToken=nn,Be(e.display.measure)&&(a=he(o,e.doc.direction))&&(i.addToken=rn(i.addToken,a)),i.map=[],an(o,i,mt(e,o,t!=e.display.externalMeasured&&Je(o))),o.styleClasses&&(o.styleClasses.bgClass&&(i.bgClass=I(o.styleClasses.bgClass,i.bgClass||"")),o.styleClasses.textClass&&(i.textClass=I(o.styleClasses.textClass,i.textClass||""))),0==i.map.length&&i.map.push(0,0,i.content.appendChild(Me(e.display.measure))),0==r?(t.measure.map=i.map,t.measure.cache={}):((t.measure.maps||(t.measure.maps=[])).push(i.map),(t.measure.caches||(t.measure.caches=[])).push({}))}if(s){var l=i.content.lastChild;(/\bcm-tab\b/.test(l.className)||l.querySelector&&l.querySelector(".cm-tab"))&&(i.content.className="cm-tab-wrap-hack")}return ve(e,"renderLine",e,t.line,i.pre),i.pre.className&&(i.textClass=I(i.pre.className,i.textClass||"")),i}function tn(e){var t=T("span","•","cm-invalidchar");return t.title="\\u"+e.charCodeAt(0).toString(16),t.setAttribute("aria-label",t.title),t}function nn(e,t,n,i,r,o,s){if(t){var u,c=e.splitSpaces?function(e,t){if(e.length>1&&!/ /.test(e))return e;for(var n=t,i="",r=0;ru&&d.from<=u);h++);if(d.to>=c)return e(n,i,r,o,a,l,s);e(n,i.slice(0,d.to-u),r,o,null,l,s),o=null,i=i.slice(d.to-u),u=d.to}}}function on(e,t,n,i){var r=!i&&n.widgetNode;r&&e.map.push(e.pos,e.pos+t,r),!i&&e.cm.display.input.needsContentAttribute&&(r||(r=e.content.appendChild(document.createElement("span"))),r.setAttribute("cm-marker",n.id)),r&&(e.cm.display.input.setUneditable(r),e.content.appendChild(r)),e.pos+=t,e.trailingSpace=!1}function an(e,t,n){var i=e.markedSpans,r=e.text,o=0;if(i)for(var a,l,s,u,c,d,h,f=r.length,p=0,m=1,g="",v=0;;){if(v==p){s=u=c=l="",h=null,d=null,v=1/0;for(var x=[],y=void 0,b=0;bp||C.collapsed&&D.to==p&&D.from==p)){if(null!=D.to&&D.to!=p&&v>D.to&&(v=D.to,u=""),C.className&&(s+=" "+C.className),C.css&&(l=(l?l+";":"")+C.css),C.startStyle&&D.from==p&&(c+=" "+C.startStyle),C.endStyle&&D.to==v&&(y||(y=[])).push(C.endStyle,D.to),C.title&&((h||(h={})).title=C.title),C.attributes)for(var w in C.attributes)(h||(h={}))[w]=C.attributes[w];C.collapsed&&(!d||It(d.marker,C)<0)&&(d=D)}else D.from>p&&v>D.from&&(v=D.from)}if(y)for(var k=0;k=f)break;for(var F=Math.min(f,v);;){if(g){var A=p+g.length;if(!d){var E=A>F?g.slice(0,F-p):g;t.addToken(t,E,a?a+s:s,c,p+E.length==v?u:"",l,h)}if(A>=F){g=g.slice(F-p),p=F;break}p=A,c=""}g=r.slice(o,o=n[m++]),a=Jt(n[m++],t.cm.options)}}else for(var L=1;Ln)return{map:e.measure.maps[r],cache:e.measure.caches[r],before:!0}}}function Nn(e,t,n,i){return zn(e,In(e,t),n,i)}function On(e,t){if(t>=e.display.viewFrom&&t=n.lineN&&t2&&o.push((s.bottom+u.top)/2-n.top)}}o.push(n.bottom-n.top)}}(e,t.view,t.rect),t.hasHeights=!0),o=function(e,t,n,i){var r,o=Pn(t.map,n,i),s=o.node,u=o.start,c=o.end,d=o.collapse;if(3==s.nodeType){for(var h=0;h<4;h++){for(;u&&ae(t.line.text.charAt(o.coverStart+u));)--u;for(;o.coverStart+c1}(e))return t;var n=screen.logicalXDPI/screen.deviceXDPI,i=screen.logicalYDPI/screen.deviceYDPI;return{left:t.left*n,right:t.right*n,top:t.top*i,bottom:t.bottom*i}}(e.display.measure,r))}else{var f;u>0&&(d=i="right"),r=e.options.lineWrapping&&(f=s.getClientRects()).length>1?f["right"==i?f.length-1:0]:s.getBoundingClientRect()}if(a&&l<9&&!u&&(!r||!r.left&&!r.right)){var p=s.parentNode.getClientRects()[0];r=p?{left:p.left,right:p.left+li(e.display),top:p.top,bottom:p.bottom}:Rn}for(var m=r.top-t.rect.top,g=r.bottom-t.rect.top,v=(m+g)/2,x=t.view.measure.heights,y=0;yt)&&(r=(o=s-l)-1,t>=s&&(a="right")),null!=r){if(i=e[u+2],l==s&&n==(i.insertLeft?"left":"right")&&(a=n),"left"==n&&0==r)for(;u&&e[u-2]==e[u-3]&&e[u-1].insertLeft;)i=e[2+(u-=3)],a="left";if("right"==n&&r==s-l)for(;u=0&&(n=e[r]).left==n.right;r--);return n}function Wn(e){if(e.measure&&(e.measure.cache={},e.measure.heights=null,e.rest))for(var t=0;t=i.text.length?(s=i.text.length,u="before"):s<=0&&(s=0,u="after"),!l)return a("before"==u?s-1:s,"before"==u);function c(e,t,n){return a(n?e-1:e,1==l[t].level!=n)}var d=ce(l,s,u),h=ue,f=c(s,d,"before"==u);return null!=h&&(f.other=c(s,h,"before"!=u)),f}function Yn(e,t){var n=0;t=ct(e.doc,t),e.options.lineWrapping||(n=li(e.display)*t.ch);var i=Ke(e.doc,t.line),r=Gt(i)+Fn(e.display);return{left:n,right:n,top:r,bottom:r+i.height}}function Qn(e,t,n,i,r){var o=it(e,t,n);return o.xRel=r,i&&(o.outside=i),o}function Jn(e,t,n){var i=e.doc;if((n+=e.display.viewOffset)<0)return Qn(i.first,0,null,-1,-1);var r=et(i,n),o=i.first+i.size-1;if(r>o)return Qn(i.first+i.size-1,Ke(i,o).text.length,null,1,1);t<0&&(t=0);for(var a=Ke(i,r);;){var l=ii(e,a,r,t,n),s=Pt(a,l.ch+(l.xRel>0||l.outside>0?1:0));if(!s)return l;var u=s.find(1);if(u.line==r)return u;a=Ke(i,r=u.line)}}function ei(e,t,n,i){i-=Gn(t);var r=t.text.length,o=se((function(t){return zn(e,n,t-1).bottom<=i}),r,0);return{begin:o,end:r=se((function(t){return zn(e,n,t).top>i}),o,r)}}function ti(e,t,n,i){return n||(n=In(e,t)),ei(e,t,n,Vn(e,t,zn(e,n,i),"line").top)}function ni(e,t,n,i){return!(e.bottom<=n)&&(e.top>n||(i?e.left:e.right)>t)}function ii(e,t,n,i,r){r-=Gt(t);var o=In(e,t),a=Gn(t),l=0,s=t.text.length,u=!0,c=he(t,e.doc.direction);if(c){var d=(e.options.lineWrapping?oi:ri)(e,t,n,o,c,i,r);l=(u=1!=d.level)?d.from:d.to-1,s=u?d.to:d.from-1}var h,f,p=null,m=null,g=se((function(t){var n=zn(e,o,t);return n.top+=a,n.bottom+=a,!!ni(n,i,r,!1)&&(n.top<=r&&n.left<=i&&(p=t,m=n),!0)}),l,s),v=!1;if(m){var x=i-m.left=b.bottom?1:0}return Qn(n,g=le(t.text,g,1),f,v,i-h)}function ri(e,t,n,i,r,o,a){var l=se((function(l){var s=r[l],u=1!=s.level;return ni(Zn(e,it(n,u?s.to:s.from,u?"before":"after"),"line",t,i),o,a,!0)}),0,r.length-1),s=r[l];if(l>0){var u=1!=s.level,c=Zn(e,it(n,u?s.from:s.to,u?"after":"before"),"line",t,i);ni(c,o,a,!0)&&c.top>a&&(s=r[l-1])}return s}function oi(e,t,n,i,r,o,a){var l=ei(e,t,i,a),s=l.begin,u=l.end;/\s/.test(t.text.charAt(u-1))&&u--;for(var c=null,d=null,h=0;h=u||f.to<=s)){var p=zn(e,i,1!=f.level?Math.min(u,f.to)-1:Math.max(s,f.from)).right,m=pm)&&(c=f,d=m)}}return c||(c=r[r.length-1]),c.fromu&&(c={from:c.from,to:u,level:c.level}),c}function ai(e){if(null!=e.cachedTextHeight)return e.cachedTextHeight;if(null==Hn){Hn=T("pre",null,"CodeMirror-line-like");for(var t=0;t<49;++t)Hn.appendChild(document.createTextNode("x")),Hn.appendChild(T("br"));Hn.appendChild(document.createTextNode("x"))}L(e.measure,Hn);var n=Hn.offsetHeight/50;return n>3&&(e.cachedTextHeight=n),E(e.measure),n||1}function li(e){if(null!=e.cachedCharWidth)return e.cachedCharWidth;var t=T("span","xxxxxxxxxx"),n=T("pre",[t],"CodeMirror-line-like");L(e.measure,n);var i=t.getBoundingClientRect(),r=(i.right-i.left)/10;return r>2&&(e.cachedCharWidth=r),r||10}function si(e){for(var t=e.display,n={},i={},r=t.gutters.clientLeft,o=t.gutters.firstChild,a=0;o;o=o.nextSibling,++a){var l=e.display.gutterSpecs[a].className;n[l]=o.offsetLeft+o.clientLeft+r,i[l]=o.clientWidth}return{fixedPos:ui(t),gutterTotalWidth:t.gutters.offsetWidth,gutterLeft:n,gutterWidth:i,wrapperWidth:t.wrapper.clientWidth}}function ui(e){return e.scroller.getBoundingClientRect().left-e.sizer.getBoundingClientRect().left}function ci(e){var t=ai(e.display),n=e.options.lineWrapping,i=n&&Math.max(5,e.display.scroller.clientWidth/li(e.display)-3);return function(r){if(Ut(e.doc,r))return 0;var o=0;if(r.widgets)for(var a=0;a0&&(s=Ke(e.doc,u.line).text).length==u.ch){var c=W(s,s.length,e.options.tabSize)-s.length;u=it(u.line,Math.max(0,Math.round((o-En(e.display).left)/li(e.display))-c))}return u}function fi(e,t){if(t>=e.display.viewTo)return null;if((t-=e.display.viewFrom)<0)return null;for(var n=e.display.view,i=0;it)&&(r.updateLineNumbers=t),e.curOp.viewChanged=!0,t>=r.viewTo)St&&jt(e.doc,t)r.viewFrom?gi(e):(r.viewFrom+=i,r.viewTo+=i);else if(t<=r.viewFrom&&n>=r.viewTo)gi(e);else if(t<=r.viewFrom){var o=vi(e,n,n+i,1);o?(r.view=r.view.slice(o.index),r.viewFrom=o.lineN,r.viewTo+=i):gi(e)}else if(n>=r.viewTo){var a=vi(e,t,t,-1);a?(r.view=r.view.slice(0,a.index),r.viewTo=a.lineN):gi(e)}else{var l=vi(e,t,t,-1),s=vi(e,n,n+i,1);l&&s?(r.view=r.view.slice(0,l.index).concat(sn(e,l.lineN,s.lineN)).concat(r.view.slice(s.index)),r.viewTo+=i):gi(e)}var u=r.externalMeasured;u&&(n=r.lineN&&t=i.viewTo)){var o=i.view[fi(e,t)];if(null!=o.node){var a=o.changes||(o.changes=[]);-1==q(a,n)&&a.push(n)}}}function gi(e){e.display.viewFrom=e.display.viewTo=e.doc.first,e.display.view=[],e.display.viewOffset=0}function vi(e,t,n,i){var r,o=fi(e,t),a=e.display.view;if(!St||n==e.doc.first+e.doc.size)return{index:o,lineN:n};for(var l=e.display.viewFrom,s=0;s0){if(o==a.length-1)return null;r=l+a[o].size-t,o++}else r=l-t;t+=r,n+=r}for(;jt(e.doc,n)!=n;){if(o==(i<0?0:a.length-1))return null;n+=i*a[o-(i<0?1:0)].size,o+=i}return{index:o,lineN:n}}function xi(e){for(var t=e.display.view,n=0,i=0;i=e.display.viewTo||s.to().line0?a:e.defaultCharWidth())+"px"}if(i.other){var l=n.appendChild(T("div"," ","CodeMirror-cursor CodeMirror-secondarycursor"));l.style.display="",l.style.left=i.other.left+"px",l.style.top=i.other.top+"px",l.style.height=.85*(i.other.bottom-i.other.top)+"px"}}function Ci(e,t){return e.top-t.top||e.left-t.left}function wi(e,t,n){var i=e.display,r=e.doc,o=document.createDocumentFragment(),a=En(e.display),l=a.left,s=Math.max(i.sizerWidth,Tn(e)-i.sizer.offsetLeft)-a.right,u="ltr"==r.direction;function c(e,t,n,i){t<0&&(t=0),t=Math.round(t),i=Math.round(i),o.appendChild(T("div",null,"CodeMirror-selected","position: absolute; left: "+e+"px;\n top: "+t+"px; width: "+(null==n?s-e:n)+"px;\n height: "+(i-t)+"px"))}function d(t,n,i){var o,a,d=Ke(r,t),h=d.text.length;function f(n,i){return Kn(e,it(t,n),"div",d,i)}function p(t,n,i){var r=ti(e,d,null,t),o="ltr"==n==("after"==i)?"left":"right";return f("after"==i?r.begin:r.end-(/\s/.test(d.text.charAt(r.end-1))?2:1),o)[o]}var m=he(d,r.direction);return function(e,t,n,i){if(!e)return i(t,n,"ltr",0);for(var r=!1,o=0;ot||t==n&&a.to==t)&&(i(Math.max(a.from,t),Math.min(a.to,n),1==a.level?"rtl":"ltr",o),r=!0)}r||i(t,n,"ltr")}(m,n||0,null==i?h:i,(function(e,t,r,d){var g="ltr"==r,v=f(e,g?"left":"right"),x=f(t-1,g?"right":"left"),y=null==n&&0==e,b=null==i&&t==h,D=0==d,C=!m||d==m.length-1;if(x.top-v.top<=3){var w=(u?b:y)&&C,k=(u?y:b)&&D?l:(g?v:x).left,S=w?s:(g?x:v).right;c(k,v.top,S-k,v.bottom)}else{var F,A,E,L;g?(F=u&&y&&D?l:v.left,A=u?s:p(e,r,"before"),E=u?l:p(t,r,"after"),L=u&&b&&C?s:x.right):(F=u?p(e,r,"before"):l,A=!u&&y&&D?s:v.right,E=!u&&b&&C?l:x.left,L=u?p(t,r,"after"):s),c(F,v.top,A-F,v.bottom),v.bottom0?t.blinker=setInterval((function(){e.hasFocus()||Ei(e),t.cursorDiv.style.visibility=(n=!n)?"":"hidden"}),e.options.cursorBlinkRate):e.options.cursorBlinkRate<0&&(t.cursorDiv.style.visibility="hidden")}}function Si(e){e.hasFocus()||(e.display.input.focus(),e.state.focused||Ai(e))}function Fi(e){e.state.delayingBlurEvent=!0,setTimeout((function(){e.state.delayingBlurEvent&&(e.state.delayingBlurEvent=!1,e.state.focused&&Ei(e))}),100)}function Ai(e,t){e.state.delayingBlurEvent&&!e.state.draggingText&&(e.state.delayingBlurEvent=!1),"nocursor"!=e.options.readOnly&&(e.state.focused||(ve(e,"focus",e,t),e.state.focused=!0,O(e.display.wrapper,"CodeMirror-focused"),e.curOp||e.display.selForContextMenu==e.doc.sel||(e.display.input.reset(),s&&setTimeout((function(){return e.display.input.reset(!0)}),20)),e.display.input.receivedFocus()),ki(e))}function Ei(e,t){e.state.delayingBlurEvent||(e.state.focused&&(ve(e,"blur",e,t),e.state.focused=!1,A(e.display.wrapper,"CodeMirror-focused")),clearInterval(e.display.blinker),setTimeout((function(){e.state.focused||(e.display.shift=!1)}),150))}function Li(e){for(var t=e.display,n=t.lineDiv.offsetTop,i=Math.max(0,t.scroller.getBoundingClientRect().top),r=t.lineDiv.getBoundingClientRect().top,o=0,s=0;s.005||m<-.005)&&(re.display.sizerWidth){var v=Math.ceil(h/li(e.display));v>e.display.maxLineLength&&(e.display.maxLineLength=v,e.display.maxLine=u.line,e.display.maxLineChanged=!0)}}}Math.abs(o)>2&&(t.scroller.scrollTop+=o)}function Ti(e){if(e.widgets)for(var t=0;t=a&&(o=et(t,Gt(Ke(t,s))-e.wrapper.clientHeight),a=s)}return{from:o,to:Math.max(a,o+1)}}function Bi(e,t){var n=e.display,i=ai(e.display);t.top<0&&(t.top=0);var r=e.curOp&&null!=e.curOp.scrollTop?e.curOp.scrollTop:n.scroller.scrollTop,o=Mn(e),a={};t.bottom-t.top>o&&(t.bottom=t.top+o);var l=e.doc.height+An(n),s=t.topl-i;if(t.topr+o){var c=Math.min(t.top,(u?l:t.bottom)-o);c!=r&&(a.scrollTop=c)}var d=e.options.fixedGutter?0:n.gutters.offsetWidth,h=e.curOp&&null!=e.curOp.scrollLeft?e.curOp.scrollLeft:n.scroller.scrollLeft-d,f=Tn(e)-n.gutters.offsetWidth,p=t.right-t.left>f;return p&&(t.right=t.left+f),t.left<10?a.scrollLeft=0:t.leftf+h-3&&(a.scrollLeft=t.right+(p?0:10)-f),a}function Ni(e,t){null!=t&&(zi(e),e.curOp.scrollTop=(null==e.curOp.scrollTop?e.doc.scrollTop:e.curOp.scrollTop)+t)}function Oi(e){zi(e);var t=e.getCursor();e.curOp.scrollToPos={from:t,to:t,margin:e.options.cursorScrollMargin}}function Ii(e,t,n){null==t&&null==n||zi(e),null!=t&&(e.curOp.scrollLeft=t),null!=n&&(e.curOp.scrollTop=n)}function zi(e){var t=e.curOp.scrollToPos;t&&(e.curOp.scrollToPos=null,Hi(e,Yn(e,t.from),Yn(e,t.to),t.margin))}function Hi(e,t,n,i){var r=Bi(e,{left:Math.min(t.left,n.left),top:Math.min(t.top,n.top)-i,right:Math.max(t.right,n.right),bottom:Math.max(t.bottom,n.bottom)+i});Ii(e,r.scrollLeft,r.scrollTop)}function Ri(e,t){Math.abs(e.doc.scrollTop-t)<2||(n||hr(e,{top:t}),Pi(e,t,!0),n&&hr(e),ar(e,100))}function Pi(e,t,n){t=Math.max(0,Math.min(e.display.scroller.scrollHeight-e.display.scroller.clientHeight,t)),(e.display.scroller.scrollTop!=t||n)&&(e.doc.scrollTop=t,e.display.scrollbars.setScrollTop(t),e.display.scroller.scrollTop!=t&&(e.display.scroller.scrollTop=t))}function _i(e,t,n,i){t=Math.max(0,Math.min(t,e.display.scroller.scrollWidth-e.display.scroller.clientWidth)),(n?t==e.doc.scrollLeft:Math.abs(e.doc.scrollLeft-t)<2)&&!i||(e.doc.scrollLeft=t,mr(e),e.display.scroller.scrollLeft!=t&&(e.display.scroller.scrollLeft=t),e.display.scrollbars.setScrollLeft(t))}function Wi(e){var t=e.display,n=t.gutters.offsetWidth,i=Math.round(e.doc.height+An(e.display));return{clientHeight:t.scroller.clientHeight,viewHeight:t.wrapper.clientHeight,scrollWidth:t.scroller.scrollWidth,clientWidth:t.scroller.clientWidth,viewWidth:t.wrapper.clientWidth,barLeft:e.options.fixedGutter?n:0,docHeight:i,scrollHeight:i+Ln(e)+t.barHeight,nativeBarWidth:t.nativeBarWidth,gutterWidth:n}}var ji=function(e,t,n){this.cm=n;var i=this.vert=T("div",[T("div",null,null,"min-width: 1px")],"CodeMirror-vscrollbar"),r=this.horiz=T("div",[T("div",null,null,"height: 100%; min-height: 1px")],"CodeMirror-hscrollbar");i.tabIndex=r.tabIndex=-1,e(i),e(r),pe(i,"scroll",(function(){i.clientHeight&&t(i.scrollTop,"vertical")})),pe(r,"scroll",(function(){r.clientWidth&&t(r.scrollLeft,"horizontal")})),this.checkedZeroWidth=!1,a&&l<8&&(this.horiz.style.minHeight=this.vert.style.minWidth="18px")};ji.prototype.update=function(e){var t=e.scrollWidth>e.clientWidth+1,n=e.scrollHeight>e.clientHeight+1,i=e.nativeBarWidth;if(n){this.vert.style.display="block",this.vert.style.bottom=t?i+"px":"0";var r=e.viewHeight-(t?i:0);this.vert.firstChild.style.height=Math.max(0,e.scrollHeight-e.clientHeight+r)+"px"}else this.vert.scrollTop=0,this.vert.style.display="",this.vert.firstChild.style.height="0";if(t){this.horiz.style.display="block",this.horiz.style.right=n?i+"px":"0",this.horiz.style.left=e.barLeft+"px";var o=e.viewWidth-e.barLeft-(n?i:0);this.horiz.firstChild.style.width=Math.max(0,e.scrollWidth-e.clientWidth+o)+"px"}else this.horiz.style.display="",this.horiz.firstChild.style.width="0";return!this.checkedZeroWidth&&e.clientHeight>0&&(0==i&&this.zeroWidthHack(),this.checkedZeroWidth=!0),{right:n?i:0,bottom:t?i:0}},ji.prototype.setScrollLeft=function(e){this.horiz.scrollLeft!=e&&(this.horiz.scrollLeft=e),this.disableHoriz&&this.enableZeroWidthBar(this.horiz,this.disableHoriz,"horiz")},ji.prototype.setScrollTop=function(e){this.vert.scrollTop!=e&&(this.vert.scrollTop=e),this.disableVert&&this.enableZeroWidthBar(this.vert,this.disableVert,"vert")},ji.prototype.zeroWidthHack=function(){var e=y&&!p?"12px":"18px";this.horiz.style.height=this.vert.style.width=e,this.horiz.style.visibility=this.vert.style.visibility="hidden",this.disableHoriz=new j,this.disableVert=new j},ji.prototype.enableZeroWidthBar=function(e,t,n){e.style.visibility="",t.set(1e3,(function i(){var r=e.getBoundingClientRect();("vert"==n?document.elementFromPoint(r.right-1,(r.top+r.bottom)/2):document.elementFromPoint((r.right+r.left)/2,r.bottom-1))!=e?e.style.visibility="hidden":t.set(1e3,i)}))},ji.prototype.clear=function(){var e=this.horiz.parentNode;e.removeChild(this.horiz),e.removeChild(this.vert)};var qi=function(){};function Ui(e,t){t||(t=Wi(e));var n=e.display.barWidth,i=e.display.barHeight;$i(e,t);for(var r=0;r<4&&n!=e.display.barWidth||i!=e.display.barHeight;r++)n!=e.display.barWidth&&e.options.lineWrapping&&Li(e),$i(e,Wi(e)),n=e.display.barWidth,i=e.display.barHeight}function $i(e,t){var n=e.display,i=n.scrollbars.update(t);n.sizer.style.paddingRight=(n.barWidth=i.right)+"px",n.sizer.style.paddingBottom=(n.barHeight=i.bottom)+"px",n.heightForcer.style.borderBottom=i.bottom+"px solid transparent",i.right&&i.bottom?(n.scrollbarFiller.style.display="block",n.scrollbarFiller.style.height=i.bottom+"px",n.scrollbarFiller.style.width=i.right+"px"):n.scrollbarFiller.style.display="",i.bottom&&e.options.coverGutterNextToScrollbar&&e.options.fixedGutter?(n.gutterFiller.style.display="block",n.gutterFiller.style.height=i.bottom+"px",n.gutterFiller.style.width=t.gutterWidth+"px"):n.gutterFiller.style.display=""}qi.prototype.update=function(){return{bottom:0,right:0}},qi.prototype.setScrollLeft=function(){},qi.prototype.setScrollTop=function(){},qi.prototype.clear=function(){};var Gi={native:ji,null:qi};function Vi(e){e.display.scrollbars&&(e.display.scrollbars.clear(),e.display.scrollbars.addClass&&A(e.display.wrapper,e.display.scrollbars.addClass)),e.display.scrollbars=new Gi[e.options.scrollbarStyle]((function(t){e.display.wrapper.insertBefore(t,e.display.scrollbarFiller),pe(t,"mousedown",(function(){e.state.focused&&setTimeout((function(){return e.display.input.focus()}),0)})),t.setAttribute("cm-not-content","true")}),(function(t,n){"horizontal"==n?_i(e,t):Ri(e,t)}),e),e.display.scrollbars.addClass&&O(e.display.wrapper,e.display.scrollbars.addClass)}var Xi=0;function Ki(e){var t;e.curOp={cm:e,viewChanged:!1,startHeight:e.doc.height,forceUpdate:!1,updateInput:0,typing:!1,changeObjs:null,cursorActivityHandlers:null,cursorActivityCalled:0,selectionChanged:!1,updateMaxLine:!1,scrollLeft:null,scrollTop:null,scrollToPos:null,focus:!1,id:++Xi,markArrays:null},t=e.curOp,un?un.ops.push(t):t.ownsGroup=un={ops:[t],delayedCallbacks:[]}}function Zi(e){var t=e.curOp;t&&function(e,t){var n=e.ownsGroup;if(n)try{!function(e){var t=e.delayedCallbacks,n=0;do{for(;n=n.viewTo)||n.maxLineChanged&&t.options.lineWrapping,e.update=e.mustUpdate&&new sr(t,e.mustUpdate&&{top:e.scrollTop,ensure:e.scrollToPos},e.forceUpdate)}function Qi(e){e.updatedDisplay=e.mustUpdate&&cr(e.cm,e.update)}function Ji(e){var t=e.cm,n=t.display;e.updatedDisplay&&Li(t),e.barMeasure=Wi(t),n.maxLineChanged&&!t.options.lineWrapping&&(e.adjustWidthTo=Nn(t,n.maxLine,n.maxLine.text.length).left+3,t.display.sizerWidth=e.adjustWidthTo,e.barMeasure.scrollWidth=Math.max(n.scroller.clientWidth,n.sizer.offsetLeft+e.adjustWidthTo+Ln(t)+t.display.barWidth),e.maxScrollLeft=Math.max(0,n.sizer.offsetLeft+e.adjustWidthTo-Tn(t))),(e.updatedDisplay||e.selectionChanged)&&(e.preparedSelection=n.input.prepareSelection())}function er(e){var t=e.cm;null!=e.adjustWidthTo&&(t.display.sizer.style.minWidth=e.adjustWidthTo+"px",e.maxScrollLeft1&&(a=!0)),null!=u.scrollLeft&&(_i(e,u.scrollLeft),Math.abs(e.doc.scrollLeft-d)>1&&(a=!0)),!a)break}return r}(t,ct(i,e.scrollToPos.from),ct(i,e.scrollToPos.to),e.scrollToPos.margin);!function(e,t){if(!xe(e,"scrollCursorIntoView")){var n=e.display,i=n.sizer.getBoundingClientRect(),r=null,o=n.wrapper.ownerDocument;if(t.top+i.top<0?r=!0:t.bottom+i.top>(o.defaultView.innerHeight||o.documentElement.clientHeight)&&(r=!1),null!=r&&!m){var a=T("div","​",null,"position: absolute;\n top: "+(t.top-n.viewOffset-Fn(e.display))+"px;\n height: "+(t.bottom-t.top+Ln(e)+n.barHeight)+"px;\n left: "+t.left+"px; width: "+Math.max(2,t.right-t.left)+"px;");e.display.lineSpace.appendChild(a),a.scrollIntoView(r),e.display.lineSpace.removeChild(a)}}}(t,r)}var o=e.maybeHiddenMarkers,a=e.maybeUnhiddenMarkers;if(o)for(var l=0;l=e.display.viewTo)){var n=+new Date+e.options.workTime,i=gt(e,t.highlightFrontier),r=[];t.iter(i.line,Math.min(t.first+t.size,e.display.viewTo+500),(function(o){if(i.line>=e.display.viewFrom){var a=o.styles,l=o.text.length>e.options.maxHighlightLength?$e(t.mode,i.state):null,s=pt(e,o,i,!0);l&&(i.state=l),o.styles=s.styles;var u=o.styleClasses,c=s.classes;c?o.styleClasses=c:u&&(o.styleClasses=null);for(var d=!a||a.length!=o.styles.length||u!=c&&(!u||!c||u.bgClass!=c.bgClass||u.textClass!=c.textClass),h=0;!d&&hn)return ar(e,e.options.workDelay),!0})),t.highlightFrontier=i.line,t.modeFrontier=Math.max(t.modeFrontier,i.line),r.length&&nr(e,(function(){for(var t=0;t=n.viewFrom&&t.visible.to<=n.viewTo&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo)&&n.renderedView==n.view&&0==xi(e))return!1;gr(e)&&(gi(e),t.dims=si(e));var r=i.first+i.size,o=Math.max(t.visible.from-e.options.viewportMargin,i.first),a=Math.min(r,t.visible.to+e.options.viewportMargin);n.viewFroma&&n.viewTo-a<20&&(a=Math.min(r,n.viewTo)),St&&(o=jt(e.doc,o),a=qt(e.doc,a));var l=o!=n.viewFrom||a!=n.viewTo||n.lastWrapHeight!=t.wrapperHeight||n.lastWrapWidth!=t.wrapperWidth;!function(e,t,n){var i=e.display;0==i.view.length||t>=i.viewTo||n<=i.viewFrom?(i.view=sn(e,t,n),i.viewFrom=t):(i.viewFrom>t?i.view=sn(e,t,i.viewFrom).concat(i.view):i.viewFromn&&(i.view=i.view.slice(0,fi(e,n)))),i.viewTo=n}(e,o,a),n.viewOffset=Gt(Ke(e.doc,n.viewFrom)),e.display.mover.style.top=n.viewOffset+"px";var u=xi(e);if(!l&&0==u&&!t.force&&n.renderedView==n.view&&(null==n.updateLineNumbers||n.updateLineNumbers>=n.viewTo))return!1;var c=ur(e);return u>4&&(n.lineDiv.style.display="none"),function(e,t,n){var i=e.display,r=e.options.lineNumbers,o=i.lineDiv,a=o.firstChild;function l(t){var n=t.nextSibling;return s&&y&&e.display.currentWheelTarget==t?t.style.display="none":t.parentNode.removeChild(t),n}for(var u=i.view,c=i.viewFrom,d=0;d-1&&(f=!1),fn(e,h,c,n)),f&&(E(h.lineNumber),h.lineNumber.appendChild(document.createTextNode(nt(e.options,c)))),a=h.node.nextSibling}else{var p=bn(e,h,c,n);o.insertBefore(p,a)}c+=h.size}for(;a;)a=l(a)}(e,n.updateLineNumbers,t.dims),u>4&&(n.lineDiv.style.display=""),n.renderedView=n.view,function(e){if(e&&e.activeElt&&e.activeElt!=N(e.activeElt.ownerDocument)&&(e.activeElt.focus(),!/^(INPUT|TEXTAREA)$/.test(e.activeElt.nodeName)&&e.anchorNode&&B(document.body,e.anchorNode)&&B(document.body,e.focusNode))){var t=e.activeElt.ownerDocument,n=t.defaultView.getSelection(),i=t.createRange();i.setEnd(e.anchorNode,e.anchorOffset),i.collapse(!1),n.removeAllRanges(),n.addRange(i),n.extend(e.focusNode,e.focusOffset)}}(c),E(n.cursorDiv),E(n.selectionDiv),n.gutters.style.height=n.sizer.style.minHeight=0,l&&(n.lastWrapHeight=t.wrapperHeight,n.lastWrapWidth=t.wrapperWidth,ar(e,400)),n.updateLineNumbers=null,!0}function dr(e,t){for(var n=t.viewport,i=!0;;i=!1){if(i&&e.options.lineWrapping&&t.oldDisplayWidth!=Tn(e))i&&(t.visible=Mi(e.display,e.doc,n));else if(n&&null!=n.top&&(n={top:Math.min(e.doc.height+An(e.display)-Mn(e),n.top)}),t.visible=Mi(e.display,e.doc,n),t.visible.from>=e.display.viewFrom&&t.visible.to<=e.display.viewTo)break;if(!cr(e,t))break;Li(e);var r=Wi(e);yi(e),Ui(e,r),pr(e,r),t.force=!1}t.signal(e,"update",e),e.display.viewFrom==e.display.reportedViewFrom&&e.display.viewTo==e.display.reportedViewTo||(t.signal(e,"viewportChange",e,e.display.viewFrom,e.display.viewTo),e.display.reportedViewFrom=e.display.viewFrom,e.display.reportedViewTo=e.display.viewTo)}function hr(e,t){var n=new sr(e,t);if(cr(e,n)){Li(e),dr(e,n);var i=Wi(e);yi(e),Ui(e,i),pr(e,i),n.finish()}}function fr(e){var t=e.gutters.offsetWidth;e.sizer.style.marginLeft=t+"px",dn(e,"gutterChanged",e)}function pr(e,t){e.display.sizer.style.minHeight=t.docHeight+"px",e.display.heightForcer.style.top=t.docHeight+"px",e.display.gutters.style.height=t.docHeight+e.display.barHeight+Ln(e)+"px"}function mr(e){var t=e.display,n=t.view;if(t.alignWidgets||t.gutters.firstChild&&e.options.fixedGutter){for(var i=ui(t)-t.scroller.scrollLeft+e.doc.scrollLeft,r=t.gutters.offsetWidth,o=i+"px",a=0;a=105&&(o.wrapper.style.clipPath="inset(0px)"),o.wrapper.setAttribute("translate","no"),a&&l<8&&(o.gutters.style.zIndex=-1,o.scroller.style.paddingRight=0),s||n&&x||(o.scroller.draggable=!0),e&&(e.appendChild?e.appendChild(o.wrapper):e(o.wrapper)),o.viewFrom=o.viewTo=t.first,o.reportedViewFrom=o.reportedViewTo=t.first,o.view=[],o.renderedView=null,o.externalMeasured=null,o.viewOffset=0,o.lastWrapHeight=o.lastWrapWidth=0,o.updateLineNumbers=null,o.nativeBarWidth=o.barHeight=o.barWidth=0,o.scrollbarsClipped=!1,o.lineNumWidth=o.lineNumInnerWidth=o.lineNumChars=null,o.alignWidgets=!1,o.cachedCharWidth=o.cachedTextHeight=o.cachedPaddingH=null,o.maxLine=null,o.maxLineLength=0,o.maxLineChanged=!1,o.wheelDX=o.wheelDY=o.wheelStartX=o.wheelStartY=null,o.shift=!1,o.selForContextMenu=null,o.activeTouch=null,o.gutterSpecs=vr(r.gutters,r.lineNumbers),xr(o),i.init(o)}sr.prototype.signal=function(e,t){be(e,t)&&this.events.push(arguments)},sr.prototype.finish=function(){for(var e=0;eu.clientWidth,p=u.scrollHeight>u.clientHeight;if(r&&f||o&&p){if(o&&y&&s)e:for(var m=t.target,g=l.view;m!=u;m=m.parentNode)for(var v=0;v=0&&rt(e,i.to())<=0)return n}return-1};var Ar=function(e,t){this.anchor=e,this.head=t};function Er(e,t,n){var i=e&&e.options.selectionsMayTouch,r=t[n];t.sort((function(e,t){return rt(e.from(),t.from())})),n=q(t,r);for(var o=1;o0:s>=0){var u=st(l.from(),a.from()),c=lt(l.to(),a.to()),d=l.empty()?a.from()==a.head:l.from()==l.head;o<=n&&--n,t.splice(--o,2,new Ar(d?c:u,d?u:c))}}return new Fr(t,n)}function Lr(e,t){return new Fr([new Ar(e,t||e)],0)}function Tr(e){return e.text?it(e.from.line+e.text.length-1,Y(e.text).length+(1==e.text.length?e.from.ch:0)):e.to}function Mr(e,t){if(rt(e,t.from)<0)return e;if(rt(e,t.to)<=0)return Tr(t);var n=e.line+t.text.length-(t.to.line-t.from.line)-1,i=e.ch;return e.line==t.to.line&&(i+=Tr(t).ch-t.to.ch),it(n,i)}function Br(e,t){for(var n=[],i=0;i1&&e.remove(l.line+1,p-1),e.insert(l.line+1,v)}dn(e,"change",e,t)}function Rr(e,t,n){!function e(i,r,o){if(i.linked)for(var a=0;al-(e.cm?e.cm.options.historyEventDelay:500)||"*"==t.origin.charAt(0)))&&(o=function(e,t){return t?(qr(e.done),Y(e.done)):e.done.length&&!Y(e.done).ranges?Y(e.done):e.done.length>1&&!e.done[e.done.length-2].ranges?(e.done.pop(),Y(e.done)):void 0}(r,r.lastOp==i)))a=Y(o.changes),0==rt(t.from,t.to)&&0==rt(t.from,a.to)?a.to=Tr(t):o.changes.push(jr(e,t));else{var s=Y(r.done);for(s&&s.ranges||Gr(e.sel,r.done),o={changes:[jr(e,t)],generation:r.generation},r.done.push(o);r.done.length>r.undoDepth;)r.done.shift(),r.done[0].ranges||r.done.shift()}r.done.push(n),r.generation=++r.maxGeneration,r.lastModTime=r.lastSelTime=l,r.lastOp=r.lastSelOp=i,r.lastOrigin=r.lastSelOrigin=t.origin,a||ve(e,"historyAdded")}function $r(e,t,n,i){var r=e.history,o=i&&i.origin;n==r.lastSelOp||o&&r.lastSelOrigin==o&&(r.lastModTime==r.lastSelTime&&r.lastOrigin==o||function(e,t,n,i){var r=t.charAt(0);return"*"==r||"+"==r&&n.ranges.length==i.ranges.length&&n.somethingSelected()==i.somethingSelected()&&new Date-e.history.lastSelTime<=(e.cm?e.cm.options.historyEventDelay:500)}(e,o,Y(r.done),t))?r.done[r.done.length-1]=t:Gr(t,r.done),r.lastSelTime=+new Date,r.lastSelOrigin=o,r.lastSelOp=n,i&&!1!==i.clearRedo&&qr(r.undone)}function Gr(e,t){var n=Y(t);n&&n.ranges&&n.equals(e)||t.push(e)}function Vr(e,t,n,i){var r=t["spans_"+e.id],o=0;e.iter(Math.max(e.first,n),Math.min(e.first+e.size,i),(function(n){n.markedSpans&&((r||(r=t["spans_"+e.id]={}))[o]=n.markedSpans),++o}))}function Xr(e){if(!e)return null;for(var t,n=0;n-1&&(Y(l)[d]=u[d],delete u[d])}}}return i}function Yr(e,t,n,i){if(i){var r=e.anchor;if(n){var o=rt(t,r)<0;o!=rt(n,r)<0?(r=t,t=n):o!=rt(t,n)<0&&(t=n)}return new Ar(r,t)}return new Ar(n||t,t)}function Qr(e,t,n,i,r){null==r&&(r=e.cm&&(e.cm.display.shift||e.extend)),io(e,new Fr([Yr(e.sel.primary(),t,n,r)],0),i)}function Jr(e,t,n){for(var i=[],r=e.cm&&(e.cm.display.shift||e.extend),o=0;o=t.ch:l.to>t.ch))){if(r&&(ve(s,"beforeCursorEnter"),s.explicitlyCleared)){if(o.markedSpans){--a;continue}break}if(!s.atomic)continue;if(n){var d=s.find(i<0?1:-1),h=void 0;if((i<0?c:u)&&(d=co(e,d,-i,d&&d.line==t.line?o:null)),d&&d.line==t.line&&(h=rt(d,n))&&(i<0?h<0:h>0))return so(e,d,t,i,r)}var f=s.find(i<0?-1:1);return(i<0?u:c)&&(f=co(e,f,i,f.line==t.line?o:null)),f?so(e,f,t,i,r):null}}return t}function uo(e,t,n,i,r){var o=i||1,a=so(e,t,n,o,r)||!r&&so(e,t,n,o,!0)||so(e,t,n,-o,r)||!r&&so(e,t,n,-o,!0);return a||(e.cantEdit=!0,it(e.first,0))}function co(e,t,n,i){return n<0&&0==t.ch?t.line>e.first?ct(e,it(t.line-1)):null:n>0&&t.ch==(i||Ke(e,t.line)).text.length?t.line0)){var c=[s,1],d=rt(u.from,l.from),h=rt(u.to,l.to);(d<0||!a.inclusiveLeft&&!d)&&c.push({from:u.from,to:l.from}),(h>0||!a.inclusiveRight&&!h)&&c.push({from:l.to,to:u.to}),r.splice.apply(r,c),s+=c.length-3}}return r}(e,t.from,t.to);if(i)for(var r=i.length-1;r>=0;--r)mo(e,{from:i[r].from,to:i[r].to,text:r?[""]:t.text,origin:t.origin});else mo(e,t)}}function mo(e,t){if(1!=t.text.length||""!=t.text[0]||0!=rt(t.from,t.to)){var n=Br(e,t);Ur(e,t,n,e.cm?e.cm.curOp.id:NaN),xo(e,t,n,Lt(e,t));var i=[];Rr(e,(function(e,n){n||-1!=q(i,e.history)||(Co(e.history,t),i.push(e.history)),xo(e,t,null,Lt(e,t))}))}}function go(e,t,n){var i=e.cm&&e.cm.state.suppressEdits;if(!i||n){for(var r,o=e.history,a=e.sel,l="undo"==t?o.done:o.undone,s="undo"==t?o.undone:o.done,u=0;u=0;--f){var p=h(f);if(p)return p.v}}}}function vo(e,t){if(0!=t&&(e.first+=t,e.sel=new Fr(Q(e.sel.ranges,(function(e){return new Ar(it(e.anchor.line+t,e.anchor.ch),it(e.head.line+t,e.head.ch))})),e.sel.primIndex),e.cm)){pi(e.cm,e.first,e.first-t,t);for(var n=e.cm.display,i=n.viewFrom;ie.lastLine())){if(t.from.lineo&&(t={from:t.from,to:it(o,Ke(e,o).text.length),text:[t.text[0]],origin:t.origin}),t.removed=Ze(e,t.from,t.to),n||(n=Br(e,t)),e.cm?function(e,t,n){var i=e.doc,r=e.display,o=t.from,a=t.to,l=!1,s=o.line;e.options.lineWrapping||(s=Je(Wt(Ke(i,o.line))),i.iter(s,a.line+1,(function(e){if(e==r.maxLine)return l=!0,!0})));i.sel.contains(t.from,t.to)>-1&&ye(e);Hr(i,t,n,ci(e)),e.options.lineWrapping||(i.iter(s,o.line+t.text.length,(function(e){var t=Vt(e);t>r.maxLineLength&&(r.maxLine=e,r.maxLineLength=t,r.maxLineChanged=!0,l=!1)})),l&&(e.curOp.updateMaxLine=!0));(function(e,t){if(e.modeFrontier=Math.min(e.modeFrontier,t),!(e.highlightFrontiern;i--){var r=Ke(e,i).stateAfter;if(r&&(!(r instanceof ht)||i+r.lookAhead1||!(this.children[0]instanceof ko))){var l=[];this.collapse(l),this.children=[new ko(l)],this.children[0].parent=this}},collapse:function(e){for(var t=0;t50){for(var a=r.lines.length%25+25,l=a;l10);e.parent.maybeSpill()}},iterN:function(e,t,n){for(var i=0;i0||0==a&&!1!==o.clearWhenEmpty)return o;if(o.replacedWith&&(o.collapsed=!0,o.widgetNode=M("span",[o.replacedWith],"CodeMirror-widget"),i.handleMouseEvents||o.widgetNode.setAttribute("cm-ignore-events","true"),i.insertLeft&&(o.widgetNode.insertLeft=!0)),o.collapsed){if(_t(e,t.line,t,n,o)||t.line!=n.line&&_t(e,n.line,t,n,o))throw new Error("Inserting collapsed marker partially overlapping an existing one");St=!0}o.addToHistory&&Ur(e,{from:t,to:n,origin:"markText"},e.sel,NaN);var l,s=t.line,u=e.cm;if(e.iter(s,n.line+1,(function(i){u&&o.collapsed&&!u.options.lineWrapping&&Wt(i)==u.display.maxLine&&(l=!0),o.collapsed&&s!=t.line&&Qe(i,0),function(e,t,n){var i=n&&window.WeakSet&&(n.markedSpans||(n.markedSpans=new WeakSet));i&&e.markedSpans&&i.has(e.markedSpans)?e.markedSpans.push(t):(e.markedSpans=e.markedSpans?e.markedSpans.concat([t]):[t],i&&i.add(e.markedSpans)),t.marker.attachLine(e)}(i,new Ft(o,s==t.line?t.ch:null,s==n.line?n.ch:null),e.cm&&e.cm.curOp),++s})),o.collapsed&&e.iter(t.line,n.line+1,(function(t){Ut(e,t)&&Qe(t,0)})),o.clearOnEnter&&pe(o,"beforeCursorEnter",(function(){return o.clear()})),o.readOnly&&(kt=!0,(e.history.done.length||e.history.undone.length)&&e.clearHistory()),o.collapsed&&(o.id=++Eo,o.atomic=!0),u){if(l&&(u.curOp.updateMaxLine=!0),o.collapsed)pi(u,t.line,n.line+1);else if(o.className||o.startStyle||o.endStyle||o.css||o.attributes||o.title)for(var c=t.line;c<=n.line;c++)mi(u,c,"text");o.atomic&&ao(u.doc),dn(u,"markerAdded",u,o)}return o}Lo.prototype.clear=function(){if(!this.explicitlyCleared){var e=this.doc.cm,t=e&&!e.curOp;if(t&&Ki(e),be(this,"clear")){var n=this.find();n&&dn(this,"clear",n.from,n.to)}for(var i=null,r=null,o=0;oe.display.maxLineLength&&(e.display.maxLine=u,e.display.maxLineLength=c,e.display.maxLineChanged=!0)}null!=i&&e&&this.collapsed&&pi(e,i,r+1),this.lines.length=0,this.explicitlyCleared=!0,this.atomic&&this.doc.cantEdit&&(this.doc.cantEdit=!1,e&&ao(e.doc)),e&&dn(e,"markerCleared",e,this,i,r),t&&Zi(e),this.parent&&this.parent.clear()}},Lo.prototype.find=function(e,t){var n,i;null==e&&"bookmark"==this.type&&(e=1);for(var r=0;r=0;s--)po(this,i[s]);l?no(this,l):this.cm&&Oi(this.cm)})),undo:or((function(){go(this,"undo")})),redo:or((function(){go(this,"redo")})),undoSelection:or((function(){go(this,"undo",!0)})),redoSelection:or((function(){go(this,"redo",!0)})),setExtending:function(e){this.extend=e},getExtending:function(){return this.extend},historySize:function(){for(var e=this.history,t=0,n=0,i=0;i=e.ch)&&t.push(r.marker.parent||r.marker)}return t},findMarks:function(e,t,n){e=ct(this,e),t=ct(this,t);var i=[],r=e.line;return this.iter(e.line,t.line+1,(function(o){var a=o.markedSpans;if(a)for(var l=0;l=s.to||null==s.from&&r!=e.line||null!=s.from&&r==t.line&&s.from>=t.ch||n&&!n(s.marker)||i.push(s.marker.parent||s.marker)}++r})),i},getAllMarks:function(){var e=[];return this.iter((function(t){var n=t.markedSpans;if(n)for(var i=0;ie)return t=e,!0;e-=o,++n})),ct(this,it(n,t))},indexFromPos:function(e){var t=(e=ct(this,e)).ch;if(e.linet&&(t=e.from),null!=e.to&&e.to-1)return t.state.draggingText(e),void setTimeout((function(){return t.display.input.focus()}),20);try{var d=e.dataTransfer.getData("Text");if(d){var h;if(t.state.draggingText&&!t.state.draggingText.copy&&(h=t.listSelections()),ro(t.doc,Lr(n,n)),h)for(var f=0;f=0;t--)yo(e.doc,"",i[t].from,i[t].to,"+delete");Oi(e)}))}function na(e,t,n){var i=le(e.text,t+n,n);return i<0||i>e.text.length?null:i}function ia(e,t,n){var i=na(e,t.ch,n);return null==i?null:new it(t.line,i,n<0?"after":"before")}function ra(e,t,n,i,r){if(e){"rtl"==t.doc.direction&&(r=-r);var o=he(n,t.doc.direction);if(o){var a,l=r<0?Y(o):o[0],s=r<0==(1==l.level)?"after":"before";if(l.level>0||"rtl"==t.doc.direction){var u=In(t,n);a=r<0?n.text.length-1:0;var c=zn(t,u,a).top;a=se((function(e){return zn(t,u,e).top==c}),r<0==(1==l.level)?l.from:l.to-1,a),"before"==s&&(a=na(n,a,1))}else a=r<0?l.to:l.from;return new it(i,a,s)}}return new it(i,r<0?n.text.length:0,r<0?"before":"after")}Vo.basic={Left:"goCharLeft",Right:"goCharRight",Up:"goLineUp",Down:"goLineDown",End:"goLineEnd",Home:"goLineStartSmart",PageUp:"goPageUp",PageDown:"goPageDown",Delete:"delCharAfter",Backspace:"delCharBefore","Shift-Backspace":"delCharBefore",Tab:"defaultTab","Shift-Tab":"indentAuto",Enter:"newlineAndIndent",Insert:"toggleOverwrite",Esc:"singleSelection"},Vo.pcDefault={"Ctrl-A":"selectAll","Ctrl-D":"deleteLine","Ctrl-Z":"undo","Shift-Ctrl-Z":"redo","Ctrl-Y":"redo","Ctrl-Home":"goDocStart","Ctrl-End":"goDocEnd","Ctrl-Up":"goLineUp","Ctrl-Down":"goLineDown","Ctrl-Left":"goGroupLeft","Ctrl-Right":"goGroupRight","Alt-Left":"goLineStart","Alt-Right":"goLineEnd","Ctrl-Backspace":"delGroupBefore","Ctrl-Delete":"delGroupAfter","Ctrl-S":"save","Ctrl-F":"find","Ctrl-G":"findNext","Shift-Ctrl-G":"findPrev","Shift-Ctrl-F":"replace","Shift-Ctrl-R":"replaceAll","Ctrl-[":"indentLess","Ctrl-]":"indentMore","Ctrl-U":"undoSelection","Shift-Ctrl-U":"redoSelection","Alt-U":"redoSelection",fallthrough:"basic"},Vo.emacsy={"Ctrl-F":"goCharRight","Ctrl-B":"goCharLeft","Ctrl-P":"goLineUp","Ctrl-N":"goLineDown","Ctrl-A":"goLineStart","Ctrl-E":"goLineEnd","Ctrl-V":"goPageDown","Shift-Ctrl-V":"goPageUp","Ctrl-D":"delCharAfter","Ctrl-H":"delCharBefore","Alt-Backspace":"delWordBefore","Ctrl-K":"killLine","Ctrl-T":"transposeChars","Ctrl-O":"openLine"},Vo.macDefault={"Cmd-A":"selectAll","Cmd-D":"deleteLine","Cmd-Z":"undo","Shift-Cmd-Z":"redo","Cmd-Y":"redo","Cmd-Home":"goDocStart","Cmd-Up":"goDocStart","Cmd-End":"goDocEnd","Cmd-Down":"goDocEnd","Alt-Left":"goGroupLeft","Alt-Right":"goGroupRight","Cmd-Left":"goLineLeft","Cmd-Right":"goLineRight","Alt-Backspace":"delGroupBefore","Ctrl-Alt-Backspace":"delGroupAfter","Alt-Delete":"delGroupAfter","Cmd-S":"save","Cmd-F":"find","Cmd-G":"findNext","Shift-Cmd-G":"findPrev","Cmd-Alt-F":"replace","Shift-Cmd-Alt-F":"replaceAll","Cmd-[":"indentLess","Cmd-]":"indentMore","Cmd-Backspace":"delWrappedLineLeft","Cmd-Delete":"delWrappedLineRight","Cmd-U":"undoSelection","Shift-Cmd-U":"redoSelection","Ctrl-Up":"goDocStart","Ctrl-Down":"goDocEnd",fallthrough:["basic","emacsy"]},Vo.default=y?Vo.macDefault:Vo.pcDefault;var oa={selectAll:ho,singleSelection:function(e){return e.setSelection(e.getCursor("anchor"),e.getCursor("head"),$)},killLine:function(e){return ta(e,(function(t){if(t.empty()){var n=Ke(e.doc,t.head.line).text.length;return t.head.ch==n&&t.head.line0)r=new it(r.line,r.ch+1),e.replaceRange(o.charAt(r.ch-1)+o.charAt(r.ch-2),it(r.line,r.ch-2),r,"+transpose");else if(r.line>e.doc.first){var a=Ke(e.doc,r.line-1).text;a&&(r=new it(r.line,1),e.replaceRange(o.charAt(0)+e.doc.lineSeparator()+a.charAt(a.length-1),it(r.line-1,a.length-1),r,"+transpose"))}n.push(new Ar(r,r))}e.setSelections(n)}))},newlineAndIndent:function(e){return nr(e,(function(){for(var t=e.listSelections(),n=t.length-1;n>=0;n--)e.replaceRange(e.doc.lineSeparator(),t[n].anchor,t[n].head,"+input");t=e.listSelections();for(var i=0;i-1&&(rt((r=u.ranges[r]).from(),t)<0||t.xRel>0)&&(rt(r.to(),t)>0||t.xRel<0)?function(e,t,n,i){var r=e.display,o=!1,u=ir(e,(function(t){s&&(r.scroller.draggable=!1),e.state.draggingText=!1,e.state.delayingBlurEvent&&(e.hasFocus()?e.state.delayingBlurEvent=!1:Fi(e)),ge(r.wrapper.ownerDocument,"mouseup",u),ge(r.wrapper.ownerDocument,"mousemove",c),ge(r.scroller,"dragstart",d),ge(r.scroller,"drop",u),o||(Ce(t),i.addNew||Qr(e.doc,n,null,null,i.extend),s&&!f||a&&9==l?setTimeout((function(){r.wrapper.ownerDocument.body.focus({preventScroll:!0}),r.input.focus()}),20):r.input.focus())})),c=function(e){o=o||Math.abs(t.clientX-e.clientX)+Math.abs(t.clientY-e.clientY)>=10},d=function(){return o=!0};s&&(r.scroller.draggable=!0);e.state.draggingText=u,u.copy=!i.moveOnDrag,pe(r.wrapper.ownerDocument,"mouseup",u),pe(r.wrapper.ownerDocument,"mousemove",c),pe(r.scroller,"dragstart",d),pe(r.scroller,"drop",u),e.state.delayingBlurEvent=!0,setTimeout((function(){return r.input.focus()}),20),r.scroller.dragDrop&&r.scroller.dragDrop()}(e,i,t,o):function(e,t,n,i){a&&Fi(e);var r=e.display,o=e.doc;Ce(t);var l,s,u=o.sel,c=u.ranges;i.addNew&&!i.extend?(s=o.sel.contains(n),l=s>-1?c[s]:new Ar(n,n)):(l=o.sel.primary(),s=o.sel.primIndex);if("rectangle"==i.unit)i.addNew||(l=new Ar(n,n)),n=hi(e,t,!0,!0),s=-1;else{var d=Da(e,n,i.unit);l=i.extend?Yr(l,d.anchor,d.head,i.extend):d}i.addNew?-1==s?(s=c.length,io(o,Er(e,c.concat([l]),s),{scroll:!1,origin:"*mouse"})):c.length>1&&c[s].empty()&&"char"==i.unit&&!i.extend?(io(o,Er(e,c.slice(0,s).concat(c.slice(s+1)),0),{scroll:!1,origin:"*mouse"}),u=o.sel):eo(o,s,l,G):(s=0,io(o,new Fr([l],0),G),u=o.sel);var h=n;function f(t){if(0!=rt(h,t))if(h=t,"rectangle"==i.unit){for(var r=[],a=e.options.tabSize,c=W(Ke(o,n.line).text,n.ch,a),d=W(Ke(o,t.line).text,t.ch,a),f=Math.min(c,d),p=Math.max(c,d),m=Math.min(n.line,t.line),g=Math.min(e.lastLine(),Math.max(n.line,t.line));m<=g;m++){var v=Ke(o,m).text,x=X(v,f,a);f==p?r.push(new Ar(it(m,x),it(m,x))):v.length>x&&r.push(new Ar(it(m,x),it(m,X(v,p,a))))}r.length||r.push(new Ar(n,n)),io(o,Er(e,u.ranges.slice(0,s).concat(r),s),{origin:"*mouse",scroll:!1}),e.scrollIntoView(t)}else{var y,b=l,D=Da(e,t,i.unit),C=b.anchor;rt(D.anchor,C)>0?(y=D.head,C=st(b.from(),D.anchor)):(y=D.anchor,C=lt(b.to(),D.head));var w=u.ranges.slice(0);w[s]=function(e,t){var n=t.anchor,i=t.head,r=Ke(e.doc,n.line);if(0==rt(n,i)&&n.sticky==i.sticky)return t;var o=he(r);if(!o)return t;var a=ce(o,n.ch,n.sticky),l=o[a];if(l.from!=n.ch&&l.to!=n.ch)return t;var s,u=a+(l.from==n.ch==(1!=l.level)?0:1);if(0==u||u==o.length)return t;if(i.line!=n.line)s=(i.line-n.line)*("ltr"==e.doc.direction?1:-1)>0;else{var c=ce(o,i.ch,i.sticky),d=c-a||(i.ch-n.ch)*(1==l.level?-1:1);s=c==u-1||c==u?d<0:d>0}var h=o[u+(s?-1:0)],f=s==(1==h.level),p=f?h.from:h.to,m=f?"after":"before";return n.ch==p&&n.sticky==m?t:new Ar(new it(n.line,p,m),i)}(e,new Ar(ct(o,C),y)),io(o,Er(e,w,s),G)}}var p=r.wrapper.getBoundingClientRect(),m=0;function g(t){var n=++m,a=hi(e,t,!0,"rectangle"==i.unit);if(a)if(0!=rt(a,h)){e.curOp.focus=N(H(e)),f(a);var l=Mi(r,o);(a.line>=l.to||a.linep.bottom?20:0;s&&setTimeout(ir(e,(function(){m==n&&(r.scroller.scrollTop+=s,g(t))})),50)}}function v(t){e.state.selectingText=!1,m=1/0,t&&(Ce(t),r.input.focus()),ge(r.wrapper.ownerDocument,"mousemove",x),ge(r.wrapper.ownerDocument,"mouseup",y),o.history.lastSelOrigin=null}var x=ir(e,(function(e){0!==e.buttons&&Ae(e)?g(e):v(e)})),y=ir(e,v);e.state.selectingText=y,pe(r.wrapper.ownerDocument,"mousemove",x),pe(r.wrapper.ownerDocument,"mouseup",y)}(e,i,t,o)}(t,i,o,e):Fe(e)==n.scroller&&Ce(e):2==r?(i&&Qr(t.doc,i),setTimeout((function(){return n.input.focus()}),20)):3==r&&(k?t.display.input.onContextMenu(e):Fi(t)))}}function Da(e,t,n){if("char"==n)return new Ar(t,t);if("word"==n)return e.findWordAt(t);if("line"==n)return new Ar(it(t.line,0),ct(e.doc,it(t.line+1,0)));var i=n(e,t);return new Ar(i.from,i.to)}function Ca(e,t,n,i){var r,o;if(t.touches)r=t.touches[0].clientX,o=t.touches[0].clientY;else try{r=t.clientX,o=t.clientY}catch(e){return!1}if(r>=Math.floor(e.display.gutters.getBoundingClientRect().right))return!1;i&&Ce(t);var a=e.display,l=a.lineDiv.getBoundingClientRect();if(o>l.bottom||!be(e,n))return ke(t);o-=l.top-a.viewOffset;for(var s=0;s=r)return ve(e,n,e,et(e.doc,o),e.display.gutterSpecs[s].className,t),ke(t)}}function wa(e,t){return Ca(e,t,"gutterClick",!0)}function ka(e,t){Sn(e.display,t)||function(e,t){if(!be(e,"gutterContextMenu"))return!1;return Ca(e,t,"gutterContextMenu",!1)}(e,t)||xe(e,t,"contextmenu")||k||e.display.input.onContextMenu(t)}function Sa(e){e.display.wrapper.className=e.display.wrapper.className.replace(/\s*cm-s-\S+/g,"")+e.options.theme.replace(/(^|\s)\s*/g," cm-s-"),qn(e)}ya.prototype.compare=function(e,t,n){return this.time+400>e&&0==rt(t,this.pos)&&n==this.button};var Fa={toString:function(){return"CodeMirror.Init"}},Aa={},Ea={};function La(e,t,n){if(!t!=!(n&&n!=Fa)){var i=e.display.dragFunctions,r=t?pe:ge;r(e.display.scroller,"dragstart",i.start),r(e.display.scroller,"dragenter",i.enter),r(e.display.scroller,"dragover",i.over),r(e.display.scroller,"dragleave",i.leave),r(e.display.scroller,"drop",i.drop)}}function Ta(e){e.options.lineWrapping?(O(e.display.wrapper,"CodeMirror-wrap"),e.display.sizer.style.minWidth="",e.display.sizerWidth=null):(A(e.display.wrapper,"CodeMirror-wrap"),Xt(e)),di(e),pi(e),qn(e),setTimeout((function(){return Ui(e)}),100)}function Ma(e,t){var n=this;if(!(this instanceof Ma))return new Ma(e,t);this.options=t=t?_(t):{},_(Aa,t,!1);var i=t.value;"string"==typeof i?i=new Io(i,t.mode,null,t.lineSeparator,t.direction):t.mode&&(i.modeOption=t.mode),this.doc=i;var r=new Ma.inputStyles[t.inputStyle](this),o=this.display=new br(e,i,r,t);for(var u in o.wrapper.CodeMirror=this,Sa(this),t.lineWrapping&&(this.display.wrapper.className+=" CodeMirror-wrap"),Vi(this),this.state={keyMaps:[],overlays:[],modeGen:0,overwrite:!1,delayingBlurEvent:!1,focused:!1,suppressEdits:!1,pasteIncoming:-1,cutIncoming:-1,selectingText:!1,draggingText:!1,highlight:new j,keySeq:null,specialChars:null},t.autofocus&&!x&&o.input.focus(),a&&l<11&&setTimeout((function(){return n.display.input.reset(!0)}),20),function(e){var t=e.display;pe(t.scroller,"mousedown",ir(e,ba)),pe(t.scroller,"dblclick",a&&l<11?ir(e,(function(t){if(!xe(e,t)){var n=hi(e,t);if(n&&!wa(e,t)&&!Sn(e.display,t)){Ce(t);var i=e.findWordAt(n);Qr(e.doc,i.anchor,i.head)}}})):function(t){return xe(e,t)||Ce(t)});pe(t.scroller,"contextmenu",(function(t){return ka(e,t)})),pe(t.input.getField(),"contextmenu",(function(n){t.scroller.contains(n.target)||ka(e,n)}));var n,i={end:0};function r(){t.activeTouch&&(n=setTimeout((function(){return t.activeTouch=null}),1e3),(i=t.activeTouch).end=+new Date)}function o(e){if(1!=e.touches.length)return!1;var t=e.touches[0];return t.radiusX<=1&&t.radiusY<=1}function s(e,t){if(null==t.left)return!0;var n=t.left-e.left,i=t.top-e.top;return n*n+i*i>400}pe(t.scroller,"touchstart",(function(r){if(!xe(e,r)&&!o(r)&&!wa(e,r)){t.input.ensurePolled(),clearTimeout(n);var a=+new Date;t.activeTouch={start:a,moved:!1,prev:a-i.end<=300?i:null},1==r.touches.length&&(t.activeTouch.left=r.touches[0].pageX,t.activeTouch.top=r.touches[0].pageY)}})),pe(t.scroller,"touchmove",(function(){t.activeTouch&&(t.activeTouch.moved=!0)})),pe(t.scroller,"touchend",(function(n){var i=t.activeTouch;if(i&&!Sn(t,n)&&null!=i.left&&!i.moved&&new Date-i.start<300){var o,a=e.coordsChar(t.activeTouch,"page");o=!i.prev||s(i,i.prev)?new Ar(a,a):!i.prev.prev||s(i,i.prev.prev)?e.findWordAt(a):new Ar(it(a.line,0),ct(e.doc,it(a.line+1,0))),e.setSelection(o.anchor,o.head),e.focus(),Ce(n)}r()})),pe(t.scroller,"touchcancel",r),pe(t.scroller,"scroll",(function(){t.scroller.clientHeight&&(Ri(e,t.scroller.scrollTop),_i(e,t.scroller.scrollLeft,!0),ve(e,"scroll",e))})),pe(t.scroller,"mousewheel",(function(t){return Sr(e,t)})),pe(t.scroller,"DOMMouseScroll",(function(t){return Sr(e,t)})),pe(t.wrapper,"scroll",(function(){return t.wrapper.scrollTop=t.wrapper.scrollLeft=0})),t.dragFunctions={enter:function(t){xe(e,t)||Se(t)},over:function(t){xe(e,t)||(!function(e,t){var n=hi(e,t);if(n){var i=document.createDocumentFragment();Di(e,n,i),e.display.dragCursor||(e.display.dragCursor=T("div",null,"CodeMirror-cursors CodeMirror-dragcursors"),e.display.lineSpace.insertBefore(e.display.dragCursor,e.display.cursorDiv)),L(e.display.dragCursor,i)}}(e,t),Se(t))},start:function(t){return function(e,t){if(a&&(!e.state.draggingText||+new Date-zo<100))Se(t);else if(!xe(e,t)&&!Sn(e.display,t)&&(t.dataTransfer.setData("Text",e.getSelection()),t.dataTransfer.effectAllowed="copyMove",t.dataTransfer.setDragImage&&!f)){var n=T("img",null,null,"position: fixed; left: 0; top: 0;");n.src="data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==",h&&(n.width=n.height=1,e.display.wrapper.appendChild(n),n._top=n.offsetTop),t.dataTransfer.setDragImage(n,0,0),h&&n.parentNode.removeChild(n)}}(e,t)},drop:ir(e,Ho),leave:function(t){xe(e,t)||Ro(e)}};var u=t.input.getField();pe(u,"keyup",(function(t){return ma.call(e,t)})),pe(u,"keydown",ir(e,pa)),pe(u,"keypress",ir(e,ga)),pe(u,"focus",(function(t){return Ai(e,t)})),pe(u,"blur",(function(t){return Ei(e,t)}))}(this),Wo(),Ki(this),this.curOp.forceUpdate=!0,Pr(this,i),t.autofocus&&!x||this.hasFocus()?setTimeout((function(){n.hasFocus()&&!n.state.focused&&Ai(n)}),20):Ei(this),Ea)Ea.hasOwnProperty(u)&&Ea[u](this,t[u],Fa);gr(this),t.finishInit&&t.finishInit(this);for(var c=0;c150)){if(!i)return;n="prev"}}else u=0,n="not";"prev"==n?u=t>o.first?W(Ke(o,t-1).text,null,a):0:"add"==n?u=s+e.options.indentUnit:"subtract"==n?u=s-e.options.indentUnit:"number"==typeof n&&(u=s+n),u=Math.max(0,u);var d="",h=0;if(e.options.indentWithTabs)for(var f=Math.floor(u/a);f;--f)h+=a,d+="\t";if(ha,s=Oe(t),u=null;if(l&&i.ranges.length>1)if(Oa&&Oa.text.join("\n")==t){if(i.ranges.length%Oa.text.length==0){u=[];for(var c=0;c=0;h--){var f=i.ranges[h],p=f.from(),m=f.to();f.empty()&&(n&&n>0?p=it(p.line,p.ch-n):e.state.overwrite&&!l?m=it(m.line,Math.min(Ke(o,m.line).text.length,m.ch+Y(s).length)):l&&Oa&&Oa.lineWise&&Oa.text.join("\n")==s.join("\n")&&(p=m=it(p.line,0)));var g={from:p,to:m,text:u?u[h%u.length]:s,origin:r||(l?"paste":e.state.cutIncoming>a?"cut":"+input")};po(e.doc,g),dn(e,"inputRead",e,g)}t&&!l&&Ra(e,t),Oi(e),e.curOp.updateInput<2&&(e.curOp.updateInput=d),e.curOp.typing=!0,e.state.pasteIncoming=e.state.cutIncoming=-1}function Ha(e,t){var n=e.clipboardData&&e.clipboardData.getData("Text");if(n)return e.preventDefault(),t.isReadOnly()||t.options.disableInput||!t.hasFocus()||nr(t,(function(){return za(t,n,0,null,"paste")})),!0}function Ra(e,t){if(e.options.electricChars&&e.options.smartIndent)for(var n=e.doc.sel,i=n.ranges.length-1;i>=0;i--){var r=n.ranges[i];if(!(r.head.ch>100||i&&n.ranges[i-1].head.line==r.head.line)){var o=e.getModeAt(r.head),a=!1;if(o.electricChars){for(var l=0;l-1){a=Na(e,r.head.line,"smart");break}}else o.electricInput&&o.electricInput.test(Ke(e.doc,r.head.line).text.slice(0,r.head.ch))&&(a=Na(e,r.head.line,"smart"));a&&dn(e,"electricInput",e,r.head.line)}}}function Pa(e){for(var t=[],n=[],i=0;i0?0:-1));if(isNaN(c))a=null;else{var d=n>0?c>=55296&&c<56320:c>=56320&&c<57343;a=new it(t.line,Math.max(0,Math.min(l.text.length,t.ch+n*(d?2:1))),-n)}}else a=r?function(e,t,n,i){var r=he(t,e.doc.direction);if(!r)return ia(t,n,i);n.ch>=t.text.length?(n.ch=t.text.length,n.sticky="before"):n.ch<=0&&(n.ch=0,n.sticky="after");var o=ce(r,n.ch,n.sticky),a=r[o];if("ltr"==e.doc.direction&&a.level%2==0&&(i>0?a.to>n.ch:a.from=a.from&&h>=c.begin)){var f=d?"before":"after";return new it(n.line,h,f)}}var p=function(e,t,i){for(var o=function(e,t){return t?new it(n.line,s(e,1),"before"):new it(n.line,e,"after")};e>=0&&e0==(1!=a.level),u=l?i.begin:s(i.end,-1);if(a.from<=u&&u0?c.end:s(c.begin,-1);return null==g||i>0&&g==t.text.length||!(m=p(i>0?0:r.length-1,i,u(g)))?null:m}(e.cm,l,t,n):ia(l,t,n);if(null==a){if(o||(u=t.line+s)=e.first+e.size||(t=new it(u,t.ch,t.sticky),!(l=Ke(e,u))))return!1;t=ra(r,e.cm,l,t.line,s)}else t=a;return!0}if("char"==i||"codepoint"==i)u();else if("column"==i)u(!0);else if("word"==i||"group"==i)for(var c=null,d="group"==i,h=e.cm&&e.cm.getHelper(t,"wordChars"),f=!0;!(n<0)||u(!f);f=!1){var p=l.text.charAt(t.ch)||"\n",m=ie(p,h)?"w":d&&"\n"==p?"n":!d||/\s/.test(p)?null:"p";if(!d||f||m||(m="s"),c&&c!=m){n<0&&(n=1,u(),t.sticky="after");break}if(m&&(c=m),n>0&&!u(!f))break}var g=uo(e,t,o,a,!0);return ot(o,g)&&(g.hitSide=!0),g}function qa(e,t,n,i){var r,o,a=e.doc,l=t.left;if("page"==i){var s=Math.min(e.display.wrapper.clientHeight,R(e).innerHeight||a(e).documentElement.clientHeight),u=Math.max(s-.5*ai(e.display),3);r=(n>0?t.bottom:t.top)+n*u}else"line"==i&&(r=n>0?t.bottom+3:t.top-3);for(;(o=Jn(e,l,r)).outside;){if(n<0?r<=0:r>=a.height){o.hitSide=!0;break}r+=5*n}return o}var Ua=function(e){this.cm=e,this.lastAnchorNode=this.lastAnchorOffset=this.lastFocusNode=this.lastFocusOffset=null,this.polling=new j,this.composing=null,this.gracePeriod=!1,this.readDOMTimeout=null};function $a(e,t){var n=On(e,t.line);if(!n||n.hidden)return null;var i=Ke(e.doc,t.line),r=Bn(n,i,t.line),o=he(i,e.doc.direction),a="left";o&&(a=ce(o,t.ch)%2?"right":"left");var l=Pn(r.map,t.ch,a);return l.offset="right"==l.collapse?l.end:l.start,l}function Ga(e,t){return t&&(e.bad=!0),e}function Va(e,t,n){var i;if(t==e.display.lineDiv){if(!(i=e.display.lineDiv.childNodes[n]))return Ga(e.clipPos(it(e.display.viewTo-1)),!0);t=null,n=0}else for(i=t;;i=i.parentNode){if(!i||i==e.display.lineDiv)return null;if(i.parentNode&&i.parentNode==e.display.lineDiv)break}for(var r=0;r=t.display.viewTo||o.line=t.display.viewFrom&&$a(t,r)||{node:s[0].measure.map[2],offset:0},c=o.linei.firstLine()&&(a=it(a.line-1,Ke(i.doc,a.line-1).length)),l.ch==Ke(i.doc,l.line).text.length&&l.liner.viewTo-1)return!1;a.line==r.viewFrom||0==(e=fi(i,a.line))?(t=Je(r.view[0].line),n=r.view[0].node):(t=Je(r.view[e].line),n=r.view[e-1].node.nextSibling);var s,u,c=fi(i,l.line);if(c==r.view.length-1?(s=r.viewTo-1,u=r.lineDiv.lastChild):(s=Je(r.view[c+1].line)-1,u=r.view[c+1].node.previousSibling),!n)return!1;for(var d=i.doc.splitLines(function(e,t,n,i,r){var o="",a=!1,l=e.doc.lineSeparator(),s=!1;function u(e){return function(t){return t.id==e}}function c(){a&&(o+=l,s&&(o+=l),a=s=!1)}function d(e){e&&(c(),o+=e)}function h(t){if(1==t.nodeType){var n=t.getAttribute("cm-text");if(n)return void d(n);var o,f=t.getAttribute("cm-marker");if(f){var p=e.findMarks(it(i,0),it(r+1,0),u(+f));return void(p.length&&(o=p[0].find(0))&&d(Ze(e.doc,o.from,o.to).join(l)))}if("false"==t.getAttribute("contenteditable"))return;var m=/^(pre|div|p|li|table|br)$/i.test(t.nodeName);if(!/^br$/i.test(t.nodeName)&&0==t.textContent.length)return;m&&c();for(var g=0;g1&&h.length>1;)if(Y(d)==Y(h))d.pop(),h.pop(),s--;else{if(d[0]!=h[0])break;d.shift(),h.shift(),t++}for(var f=0,p=0,m=d[0],g=h[0],v=Math.min(m.length,g.length);fa.ch&&x.charCodeAt(x.length-p-1)==y.charCodeAt(y.length-p-1);)f--,p++;d[d.length-1]=x.slice(0,x.length-p).replace(/^\u200b+/,""),d[0]=d[0].slice(f).replace(/\u200b+$/,"");var D=it(t,f),C=it(s,h.length?Y(h).length-p:0);return d.length>1||d[0]||rt(D,C)?(yo(i.doc,d,D,C,"+input"),!0):void 0},Ua.prototype.ensurePolled=function(){this.forceCompositionEnd()},Ua.prototype.reset=function(){this.forceCompositionEnd()},Ua.prototype.forceCompositionEnd=function(){this.composing&&(clearTimeout(this.readDOMTimeout),this.composing=null,this.updateFromDOM(),this.div.blur(),this.div.focus())},Ua.prototype.readFromDOMSoon=function(){var e=this;null==this.readDOMTimeout&&(this.readDOMTimeout=setTimeout((function(){if(e.readDOMTimeout=null,e.composing){if(!e.composing.done)return;e.composing=null}e.updateFromDOM()}),80))},Ua.prototype.updateFromDOM=function(){var e=this;!this.cm.isReadOnly()&&this.pollContent()||nr(this.cm,(function(){return pi(e.cm)}))},Ua.prototype.setUneditable=function(e){e.contentEditable="false"},Ua.prototype.onKeyPress=function(e){0==e.charCode||this.composing||(e.preventDefault(),this.cm.isReadOnly()||ir(this.cm,za)(this.cm,String.fromCharCode(null==e.charCode?e.keyCode:e.charCode),0))},Ua.prototype.readOnlyChanged=function(e){this.div.contentEditable=String("nocursor"!=e)},Ua.prototype.onContextMenu=function(){},Ua.prototype.resetPosition=function(){},Ua.prototype.needsContentAttribute=!0;var Ka=function(e){this.cm=e,this.prevInput="",this.pollingFast=!1,this.polling=new j,this.hasSelection=!1,this.composing=null,this.resetting=!1};Ka.prototype.init=function(e){var t=this,n=this,i=this.cm;this.createField(e);var r=this.textarea;function o(e){if(!xe(i,e)){if(i.somethingSelected())Ia({lineWise:!1,text:i.getSelections()});else{if(!i.options.lineWiseCopyCut)return;var t=Pa(i);Ia({lineWise:!0,text:t.text}),"cut"==e.type?i.setSelections(t.ranges,null,$):(n.prevInput="",r.value=t.text.join("\n"),z(r))}"cut"==e.type&&(i.state.cutIncoming=+new Date)}}e.wrapper.insertBefore(this.wrapper,e.wrapper.firstChild),g&&(r.style.width="0px"),pe(r,"input",(function(){a&&l>=9&&t.hasSelection&&(t.hasSelection=null),n.poll()})),pe(r,"paste",(function(e){xe(i,e)||Ha(e,i)||(i.state.pasteIncoming=+new Date,n.fastPoll())})),pe(r,"cut",o),pe(r,"copy",o),pe(e.scroller,"paste",(function(t){if(!Sn(e,t)&&!xe(i,t)){if(!r.dispatchEvent)return i.state.pasteIncoming=+new Date,void n.focus();var o=new Event("paste");o.clipboardData=t.clipboardData,r.dispatchEvent(o)}})),pe(e.lineSpace,"selectstart",(function(t){Sn(e,t)||Ce(t)})),pe(r,"compositionstart",(function(){var e=i.getCursor("from");n.composing&&n.composing.range.clear(),n.composing={start:e,range:i.markText(e,i.getCursor("to"),{className:"CodeMirror-composing"})}})),pe(r,"compositionend",(function(){n.composing&&(n.poll(),n.composing.range.clear(),n.composing=null)}))},Ka.prototype.createField=function(e){this.wrapper=Wa(),this.textarea=this.wrapper.firstChild},Ka.prototype.screenReaderLabelChanged=function(e){e?this.textarea.setAttribute("aria-label",e):this.textarea.removeAttribute("aria-label")},Ka.prototype.prepareSelection=function(){var e=this.cm,t=e.display,n=e.doc,i=bi(e);if(e.options.moveInputWithCursor){var r=Zn(e,n.sel.primary().head,"div"),o=t.wrapper.getBoundingClientRect(),a=t.lineDiv.getBoundingClientRect();i.teTop=Math.max(0,Math.min(t.wrapper.clientHeight-10,r.top+a.top-o.top)),i.teLeft=Math.max(0,Math.min(t.wrapper.clientWidth-10,r.left+a.left-o.left))}return i},Ka.prototype.showSelection=function(e){var t=this.cm.display;L(t.cursorDiv,e.cursors),L(t.selectionDiv,e.selection),null!=e.teTop&&(this.wrapper.style.top=e.teTop+"px",this.wrapper.style.left=e.teLeft+"px")},Ka.prototype.reset=function(e){if(!(this.contextMenuPending||this.composing&&e)){var t=this.cm;if(this.resetting=!0,t.somethingSelected()){this.prevInput="";var n=t.getSelection();this.textarea.value=n,t.state.focused&&z(this.textarea),a&&l>=9&&(this.hasSelection=n)}else e||(this.prevInput=this.textarea.value="",a&&l>=9&&(this.hasSelection=null));this.resetting=!1}},Ka.prototype.getField=function(){return this.textarea},Ka.prototype.supportsTouch=function(){return!1},Ka.prototype.focus=function(){if("nocursor"!=this.cm.options.readOnly&&(!x||N(this.textarea.ownerDocument)!=this.textarea))try{this.textarea.focus()}catch(e){}},Ka.prototype.blur=function(){this.textarea.blur()},Ka.prototype.resetPosition=function(){this.wrapper.style.top=this.wrapper.style.left=0},Ka.prototype.receivedFocus=function(){this.slowPoll()},Ka.prototype.slowPoll=function(){var e=this;this.pollingFast||this.polling.set(this.cm.options.pollInterval,(function(){e.poll(),e.cm.state.focused&&e.slowPoll()}))},Ka.prototype.fastPoll=function(){var e=!1,t=this;t.pollingFast=!0,t.polling.set(20,(function n(){t.poll()||e?(t.pollingFast=!1,t.slowPoll()):(e=!0,t.polling.set(60,n))}))},Ka.prototype.poll=function(){var e=this,t=this.cm,n=this.textarea,i=this.prevInput;if(this.contextMenuPending||this.resetting||!t.state.focused||Ie(n)&&!i&&!this.composing||t.isReadOnly()||t.options.disableInput||t.state.keySeq)return!1;var r=n.value;if(r==i&&!t.somethingSelected())return!1;if(a&&l>=9&&this.hasSelection===r||y&&/[\uf700-\uf7ff]/.test(r))return t.display.input.reset(),!1;if(t.doc.sel==t.display.selForContextMenu){var o=r.charCodeAt(0);if(8203!=o||i||(i="​"),8666==o)return this.reset(),this.cm.execCommand("undo")}for(var s=0,u=Math.min(i.length,r.length);s1e3||r.indexOf("\n")>-1?n.value=e.prevInput="":e.prevInput=r,e.composing&&(e.composing.range.clear(),e.composing.range=t.markText(e.composing.start,t.getCursor("to"),{className:"CodeMirror-composing"}))})),!0},Ka.prototype.ensurePolled=function(){this.pollingFast&&this.poll()&&(this.pollingFast=!1)},Ka.prototype.onKeyPress=function(){a&&l>=9&&(this.hasSelection=null),this.fastPoll()},Ka.prototype.onContextMenu=function(e){var t=this,n=t.cm,i=n.display,r=t.textarea;t.contextMenuPending&&t.contextMenuPending();var o=hi(n,e),u=i.scroller.scrollTop;if(o&&!h){n.options.resetSelectionOnContextMenu&&-1==n.doc.sel.contains(o)&&ir(n,io)(n.doc,Lr(o),$);var c,d=r.style.cssText,f=t.wrapper.style.cssText,p=t.wrapper.offsetParent.getBoundingClientRect();if(t.wrapper.style.cssText="position: static",r.style.cssText="position: absolute; width: 30px; height: 30px;\n top: "+(e.clientY-p.top-5)+"px; left: "+(e.clientX-p.left-5)+"px;\n z-index: 1000; background: "+(a?"rgba(255, 255, 255, .05)":"transparent")+";\n outline: none; border-width: 0; outline: none; overflow: hidden; opacity: .05; filter: alpha(opacity=5);",s&&(c=r.ownerDocument.defaultView.scrollY),i.input.focus(),s&&r.ownerDocument.defaultView.scrollTo(null,c),i.input.reset(),n.somethingSelected()||(r.value=t.prevInput=" "),t.contextMenuPending=v,i.selForContextMenu=n.doc.sel,clearTimeout(i.detectingSelectAll),a&&l>=9&&g(),k){Se(e);var m=function(){ge(window,"mouseup",m),setTimeout(v,20)};pe(window,"mouseup",m)}else setTimeout(v,50)}function g(){if(null!=r.selectionStart){var e=n.somethingSelected(),o="​"+(e?r.value:"");r.value="⇚",r.value=o,t.prevInput=e?"":"​",r.selectionStart=1,r.selectionEnd=o.length,i.selForContextMenu=n.doc.sel}}function v(){if(t.contextMenuPending==v&&(t.contextMenuPending=!1,t.wrapper.style.cssText=f,r.style.cssText=d,a&&l<9&&i.scrollbars.setScrollTop(i.scroller.scrollTop=u),null!=r.selectionStart)){(!a||a&&l<9)&&g();var e=0,o=function(){i.selForContextMenu==n.doc.sel&&0==r.selectionStart&&r.selectionEnd>0&&"​"==t.prevInput?ir(n,ho)(n):e++<10?i.detectingSelectAll=setTimeout(o,500):(i.selForContextMenu=null,i.input.reset())};i.detectingSelectAll=setTimeout(o,200)}}},Ka.prototype.readOnlyChanged=function(e){e||this.reset(),this.textarea.disabled="nocursor"==e,this.textarea.readOnly=!!e},Ka.prototype.setUneditable=function(){},Ka.prototype.needsContentAttribute=!1,function(e){var t=e.optionHandlers;function n(n,i,r,o){e.defaults[n]=i,r&&(t[n]=o?function(e,t,n){n!=Fa&&r(e,t,n)}:r)}e.defineOption=n,e.Init=Fa,n("value","",(function(e,t){return e.setValue(t)}),!0),n("mode",null,(function(e,t){e.doc.modeOption=t,Or(e)}),!0),n("indentUnit",2,Or,!0),n("indentWithTabs",!1),n("smartIndent",!0),n("tabSize",4,(function(e){Ir(e),qn(e),pi(e)}),!0),n("lineSeparator",null,(function(e,t){if(e.doc.lineSep=t,t){var n=[],i=e.doc.first;e.doc.iter((function(e){for(var r=0;;){var o=e.text.indexOf(t,r);if(-1==o)break;r=o+t.length,n.push(it(i,o))}i++}));for(var r=n.length-1;r>=0;r--)yo(e.doc,t,n[r],it(n[r].line,n[r].ch+t.length))}})),n("specialChars",/[\u0000-\u001f\u007f-\u009f\u00ad\u061c\u200b\u200e\u200f\u2028\u2029\u202d\u202e\u2066\u2067\u2069\ufeff\ufff9-\ufffc]/g,(function(e,t,n){e.state.specialChars=new RegExp(t.source+(t.test("\t")?"":"|\t"),"g"),n!=Fa&&e.refresh()})),n("specialCharPlaceholder",tn,(function(e){return e.refresh()}),!0),n("electricChars",!0),n("inputStyle",x?"contenteditable":"textarea",(function(){throw new Error("inputStyle can not (yet) be changed in a running editor")}),!0),n("spellcheck",!1,(function(e,t){return e.getInputField().spellcheck=t}),!0),n("autocorrect",!1,(function(e,t){return e.getInputField().autocorrect=t}),!0),n("autocapitalize",!1,(function(e,t){return e.getInputField().autocapitalize=t}),!0),n("rtlMoveVisually",!D),n("wholeLineUpdateBefore",!0),n("theme","default",(function(e){Sa(e),yr(e)}),!0),n("keyMap","default",(function(e,t,n){var i=ea(t),r=n!=Fa&&ea(n);r&&r.detach&&r.detach(e,i),i.attach&&i.attach(e,r||null)})),n("extraKeys",null),n("configureMouse",null),n("lineWrapping",!1,Ta,!0),n("gutters",[],(function(e,t){e.display.gutterSpecs=vr(t,e.options.lineNumbers),yr(e)}),!0),n("fixedGutter",!0,(function(e,t){e.display.gutters.style.left=t?ui(e.display)+"px":"0",e.refresh()}),!0),n("coverGutterNextToScrollbar",!1,(function(e){return Ui(e)}),!0),n("scrollbarStyle","native",(function(e){Vi(e),Ui(e),e.display.scrollbars.setScrollTop(e.doc.scrollTop),e.display.scrollbars.setScrollLeft(e.doc.scrollLeft)}),!0),n("lineNumbers",!1,(function(e,t){e.display.gutterSpecs=vr(e.options.gutters,t),yr(e)}),!0),n("firstLineNumber",1,yr,!0),n("lineNumberFormatter",(function(e){return e}),yr,!0),n("showCursorWhenSelecting",!1,yi,!0),n("resetSelectionOnContextMenu",!0),n("lineWiseCopyCut",!0),n("pasteLinesPerSelection",!0),n("selectionsMayTouch",!1),n("readOnly",!1,(function(e,t){"nocursor"==t&&(Ei(e),e.display.input.blur()),e.display.input.readOnlyChanged(t)})),n("screenReaderLabel",null,(function(e,t){t=""===t?null:t,e.display.input.screenReaderLabelChanged(t)})),n("disableInput",!1,(function(e,t){t||e.display.input.reset()}),!0),n("dragDrop",!0,La),n("allowDropFileTypes",null),n("cursorBlinkRate",530),n("cursorScrollMargin",0),n("cursorHeight",1,yi,!0),n("singleCursorHeightPerLine",!0,yi,!0),n("workTime",100),n("workDelay",100),n("flattenSpans",!0,Ir,!0),n("addModeClass",!1,Ir,!0),n("pollInterval",100),n("undoDepth",200,(function(e,t){return e.doc.history.undoDepth=t})),n("historyEventDelay",1250),n("viewportMargin",10,(function(e){return e.refresh()}),!0),n("maxHighlightLength",1e4,Ir,!0),n("moveInputWithCursor",!0,(function(e,t){t||e.display.input.resetPosition()})),n("tabindex",null,(function(e,t){return e.display.input.getField().tabIndex=t||""})),n("autofocus",null),n("direction","ltr",(function(e,t){return e.doc.setDirection(t)}),!0),n("phrases",null)}(Ma),function(e){var t=e.optionHandlers,n=e.helpers={};e.prototype={constructor:e,focus:function(){R(this).focus(),this.display.input.focus()},setOption:function(e,n){var i=this.options,r=i[e];i[e]==n&&"mode"!=e||(i[e]=n,t.hasOwnProperty(e)&&ir(this,t[e])(this,n,r),ve(this,"optionChange",this,e))},getOption:function(e){return this.options[e]},getDoc:function(){return this.doc},addKeyMap:function(e,t){this.state.keyMaps[t?"push":"unshift"](ea(e))},removeKeyMap:function(e){for(var t=this.state.keyMaps,n=0;nn&&(Na(this,r.head.line,e,!0),n=r.head.line,i==this.doc.sel.primIndex&&Oi(this));else{var o=r.from(),a=r.to(),l=Math.max(n,o.line);n=Math.min(this.lastLine(),a.line-(a.ch?0:1))+1;for(var s=l;s0&&eo(this.doc,i,new Ar(o,u[i].to()),$)}}})),getTokenAt:function(e,t){return Dt(this,e,t)},getLineTokens:function(e,t){return Dt(this,it(e),t,!0)},getTokenTypeAt:function(e){e=ct(this.doc,e);var t,n=mt(this,Ke(this.doc,e.line)),i=0,r=(n.length-1)/2,o=e.ch;if(0==o)t=n[2];else for(;;){var a=i+r>>1;if((a?n[2*a-1]:0)>=o)r=a;else{if(!(n[2*a+1]o&&(e=o,r=!0),i=Ke(this.doc,e)}else i=e;return Vn(this,i,{top:0,left:0},t||"page",n||r).top+(r?this.doc.height-Gt(i):0)},defaultTextHeight:function(){return ai(this.display)},defaultCharWidth:function(){return li(this.display)},getViewport:function(){return{from:this.display.viewFrom,to:this.display.viewTo}},addWidget:function(e,t,n,i,r){var o,a,l,s=this.display,u=(e=Zn(this,ct(this.doc,e))).bottom,c=e.left;if(t.style.position="absolute",t.setAttribute("cm-ignore-events","true"),this.display.input.setUneditable(t),s.sizer.appendChild(t),"over"==i)u=e.top;else if("above"==i||"near"==i){var d=Math.max(s.wrapper.clientHeight,this.doc.height),h=Math.max(s.sizer.clientWidth,s.lineSpace.clientWidth);("above"==i||e.bottom+t.offsetHeight>d)&&e.top>t.offsetHeight?u=e.top-t.offsetHeight:e.bottom+t.offsetHeight<=d&&(u=e.bottom),c+t.offsetWidth>h&&(c=h-t.offsetWidth)}t.style.top=u+"px",t.style.left=t.style.right="","right"==r?(c=s.sizer.clientWidth-t.offsetWidth,t.style.right="0px"):("left"==r?c=0:"middle"==r&&(c=(s.sizer.clientWidth-t.offsetWidth)/2),t.style.left=c+"px"),n&&(o=this,a={left:c,top:u,right:c+t.offsetWidth,bottom:u+t.offsetHeight},null!=(l=Bi(o,a)).scrollTop&&Ri(o,l.scrollTop),null!=l.scrollLeft&&_i(o,l.scrollLeft))},triggerOnKeyDown:rr(pa),triggerOnKeyPress:rr(ga),triggerOnKeyUp:ma,triggerOnMouseDown:rr(ba),execCommand:function(e){if(oa.hasOwnProperty(e))return oa[e].call(null,this)},triggerElectric:rr((function(e){Ra(this,e)})),findPosH:function(e,t,n,i){var r=1;t<0&&(r=-1,t=-t);for(var o=ct(this.doc,e),a=0;a0&&a(t.charAt(n-1));)--n;for(;i.5||this.options.lineWrapping)&&di(this),ve(this,"refresh",this)})),swapDoc:rr((function(e){var t=this.doc;return t.cm=null,this.state.selectingText&&this.state.selectingText(),Pr(this,e),qn(this),this.display.input.reset(),Ii(this,e.scrollLeft,e.scrollTop),this.curOp.forceScroll=!0,dn(this,"swapDoc",this,t),t})),phrase:function(e){var t=this.options.phrases;return t&&Object.prototype.hasOwnProperty.call(t,e)?t[e]:e},getInputField:function(){return this.display.input.getField()},getWrapperElement:function(){return this.display.wrapper},getScrollerElement:function(){return this.display.scroller},getGutterElement:function(){return this.display.gutters}},De(e),e.registerHelper=function(t,i,r){n.hasOwnProperty(t)||(n[t]=e[t]={_global:[]}),n[t][i]=r},e.registerGlobalHelper=function(t,i,r,o){e.registerHelper(t,i,o),n[t]._global.push({pred:r,val:o})}}(Ma);var Za="iter insert remove copy getEditor constructor".split(" ");for(var Ya in Io.prototype)Io.prototype.hasOwnProperty(Ya)&&q(Za,Ya)<0&&(Ma.prototype[Ya]=function(e){return function(){return e.apply(this.doc,arguments)}}(Io.prototype[Ya]));return De(Io),Ma.inputStyles={textarea:Ka,contenteditable:Ua},Ma.defineMode=function(e){Ma.defaults.mode||"null"==e||(Ma.defaults.mode=e),_e.apply(this,arguments)},Ma.defineMIME=function(e,t){Pe[e]=t},Ma.defineMode("null",(function(){return{token:function(e){return e.skipToEnd()}}})),Ma.defineMIME("text/plain","null"),Ma.defineExtension=function(e,t){Ma.prototype[e]=t},Ma.defineDocExtension=function(e,t){Io.prototype[e]=t},Ma.fromTextArea=function(e,t){if((t=t?_(t):{}).value=e.value,!t.tabindex&&e.tabIndex&&(t.tabindex=e.tabIndex),!t.placeholder&&e.placeholder&&(t.placeholder=e.placeholder),null==t.autofocus){var n=N(e.ownerDocument);t.autofocus=n==e||null!=e.getAttribute("autofocus")&&n==document.body}function i(){e.value=l.getValue()}var r;if(e.form&&(pe(e.form,"submit",i),!t.leaveSubmitMethodAlone)){var o=e.form;r=o.submit;try{var a=o.submit=function(){i(),o.submit=r,o.submit(),o.submit=a}}catch(e){}}t.finishInit=function(n){n.save=i,n.getTextArea=function(){return e},n.toTextArea=function(){n.toTextArea=isNaN,i(),e.parentNode.removeChild(n.getWrapperElement()),e.style.display="",e.form&&(ge(e.form,"submit",i),t.leaveSubmitMethodAlone||"function"!=typeof e.form.submit||(e.form.submit=r))}},e.style.display="none";var l=Ma((function(t){return e.parentNode.insertBefore(t,e.nextSibling)}),t);return l},function(e){e.off=ge,e.on=pe,e.wheelEventPixels=kr,e.Doc=Io,e.splitLines=Oe,e.countColumn=W,e.findColumn=X,e.isWordChar=ne,e.Pass=U,e.signal=ve,e.Line=Kt,e.changeEnd=Tr,e.scrollbarModel=Gi,e.Pos=it,e.cmpPos=rt,e.modes=Re,e.mimeModes=Pe,e.resolveMode=We,e.getMode=je,e.modeExtensions=qe,e.extendMode=Ue,e.copyState=$e,e.startState=Ve,e.innerMode=Ge,e.commands=oa,e.keyMap=Vo,e.keyName=Jo,e.isModifierKey=Yo,e.lookupKey=Zo,e.normalizeKeyMap=Ko,e.StringStream=Xe,e.SharedTextMarker=Mo,e.TextMarker=Lo,e.LineWidget=Fo,e.e_preventDefault=Ce,e.e_stopPropagation=we,e.e_stop=Se,e.addClass=O,e.contains=B,e.rmClass=A,e.keyNames=qo}(Ma),Ma.version="5.65.9",Ma}))},{}],11:[function(e,t,n){var i;i=function(e){"use strict";var t=/^((?:(?:aaas?|about|acap|adiumxtra|af[ps]|aim|apt|attachment|aw|beshare|bitcoin|bolo|callto|cap|chrome(?:-extension)?|cid|coap|com-eventbrite-attendee|content|crid|cvs|data|dav|dict|dlna-(?:playcontainer|playsingle)|dns|doi|dtn|dvb|ed2k|facetime|feed|file|finger|fish|ftp|geo|gg|git|gizmoproject|go|gopher|gtalk|h323|hcp|https?|iax|icap|icon|im|imap|info|ipn|ipp|irc[6s]?|iris(?:\.beep|\.lwz|\.xpc|\.xpcs)?|itms|jar|javascript|jms|keyparc|lastfm|ldaps?|magnet|mailto|maps|market|message|mid|mms|ms-help|msnim|msrps?|mtqp|mumble|mupdate|mvn|news|nfs|nih?|nntp|notes|oid|opaquelocktoken|palm|paparazzi|platform|pop|pres|proxy|psyc|query|res(?:ource)?|rmi|rsync|rtmp|rtsp|secondlife|service|session|sftp|sgn|shttp|sieve|sips?|skype|sm[bs]|snmp|soap\.beeps?|soldat|spotify|ssh|steam|svn|tag|teamspeak|tel(?:net)?|tftp|things|thismessage|tip|tn3270|tv|udp|unreal|urn|ut2004|vemmi|ventrilo|view-source|webcal|wss?|wtai|wyciwyg|xcon(?:-userid)?|xfire|xmlrpc\.beeps?|xmpp|xri|ymsgr|z39\.50[rs]?):(?:\/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}\/)(?:[^\s()<>]|\([^\s()<>]*\))+(?:\([^\s()<>]*\)|[^\s`*!()\[\]{};:'".,<>?«»“”‘’]))/i;e.defineMode("gfm",(function(n,i){var r=0,o={startState:function(){return{code:!1,codeBlock:!1,ateSpace:!1}},copyState:function(e){return{code:e.code,codeBlock:e.codeBlock,ateSpace:e.ateSpace}},token:function(e,n){if(n.combineTokens=null,n.codeBlock)return e.match(/^```+/)?(n.codeBlock=!1,null):(e.skipToEnd(),null);if(e.sol()&&(n.code=!1),e.sol()&&e.match(/^```+/))return e.skipToEnd(),n.codeBlock=!0,null;if("`"===e.peek()){e.next();var o=e.pos;e.eatWhile("`");var a=1+e.pos-o;return n.code?a===r&&(n.code=!1):(r=a,n.code=!0),null}if(n.code)return e.next(),null;if(e.eatSpace())return n.ateSpace=!0,null;if((e.sol()||n.ateSpace)&&(n.ateSpace=!1,!1!==i.gitHubSpice)){if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+@)?(?=.{0,6}\d)(?:[a-f0-9]{7,40}\b)/))return n.combineTokens=!0,"link";if(e.match(/^(?:[a-zA-Z0-9\-_]+\/)?(?:[a-zA-Z0-9\-_]+)?#[0-9]+\b/))return n.combineTokens=!0,"link"}return e.match(t)&&"]("!=e.string.slice(e.start-2,e.start)&&(0==e.start||/\W/.test(e.string.charAt(e.start-1)))?(n.combineTokens=!0,"link"):(e.next(),null)},blankLine:function(e){return e.code=!1,null}},a={taskLists:!0,strikethrough:!0,emoji:!0};for(var l in i)a[l]=i[l];return a.name="markdown",e.overlayMode(e.getMode(n,a),o)}),"markdown"),e.defineMIME("text/x-gfm","gfm")},"object"==typeof n&&"object"==typeof t?i(e("../../lib/codemirror"),e("../markdown/markdown"),e("../../addon/mode/overlay")):i(CodeMirror)},{"../../addon/mode/overlay":7,"../../lib/codemirror":10,"../markdown/markdown":12}],12:[function(e,t,n){var i;i=function(e){"use strict";e.defineMode("markdown",(function(t,n){var i=e.getMode(t,"text/html"),r="null"==i.name;void 0===n.highlightFormatting&&(n.highlightFormatting=!1),void 0===n.maxBlockquoteDepth&&(n.maxBlockquoteDepth=0),void 0===n.taskLists&&(n.taskLists=!1),void 0===n.strikethrough&&(n.strikethrough=!1),void 0===n.emoji&&(n.emoji=!1),void 0===n.fencedCodeBlockHighlighting&&(n.fencedCodeBlockHighlighting=!0),void 0===n.fencedCodeBlockDefaultMode&&(n.fencedCodeBlockDefaultMode="text/plain"),void 0===n.xml&&(n.xml=!0),void 0===n.tokenTypeOverrides&&(n.tokenTypeOverrides={});var o={header:"header",code:"comment",quote:"quote",list1:"variable-2",list2:"variable-3",list3:"keyword",hr:"hr",image:"image",imageAltText:"image-alt-text",imageMarker:"image-marker",formatting:"formatting",linkInline:"link",linkEmail:"link",linkText:"link",linkHref:"string",em:"em",strong:"strong",strikethrough:"strikethrough",emoji:"builtin"};for(var a in o)o.hasOwnProperty(a)&&n.tokenTypeOverrides[a]&&(o[a]=n.tokenTypeOverrides[a]);var l=/^([*\-_])(?:\s*\1){2,}\s*$/,s=/^(?:[*\-+]|^[0-9]+([.)]))\s+/,u=/^\[(x| )\](?=\s)/i,c=n.allowAtxHeaderWithoutSpace?/^(#+)/:/^(#+)(?: |$)/,d=/^ {0,3}(?:\={1,}|-{2,})\s*$/,h=/^[^#!\[\]*_\\<>` "'(~:]+/,f=/^(~~~+|```+)[ \t]*([\w\/+#-]*)[^\n`]*$/,p=/^\s*\[[^\]]+?\]:.*$/,m=/[!"#$%&'()*+,\-.\/:;<=>?@\[\\\]^_`{|}~\xA1\xA7\xAB\xB6\xB7\xBB\xBF\u037E\u0387\u055A-\u055F\u0589\u058A\u05BE\u05C0\u05C3\u05C6\u05F3\u05F4\u0609\u060A\u060C\u060D\u061B\u061E\u061F\u066A-\u066D\u06D4\u0700-\u070D\u07F7-\u07F9\u0830-\u083E\u085E\u0964\u0965\u0970\u0AF0\u0DF4\u0E4F\u0E5A\u0E5B\u0F04-\u0F12\u0F14\u0F3A-\u0F3D\u0F85\u0FD0-\u0FD4\u0FD9\u0FDA\u104A-\u104F\u10FB\u1360-\u1368\u1400\u166D\u166E\u169B\u169C\u16EB-\u16ED\u1735\u1736\u17D4-\u17D6\u17D8-\u17DA\u1800-\u180A\u1944\u1945\u1A1E\u1A1F\u1AA0-\u1AA6\u1AA8-\u1AAD\u1B5A-\u1B60\u1BFC-\u1BFF\u1C3B-\u1C3F\u1C7E\u1C7F\u1CC0-\u1CC7\u1CD3\u2010-\u2027\u2030-\u2043\u2045-\u2051\u2053-\u205E\u207D\u207E\u208D\u208E\u2308-\u230B\u2329\u232A\u2768-\u2775\u27C5\u27C6\u27E6-\u27EF\u2983-\u2998\u29D8-\u29DB\u29FC\u29FD\u2CF9-\u2CFC\u2CFE\u2CFF\u2D70\u2E00-\u2E2E\u2E30-\u2E42\u3001-\u3003\u3008-\u3011\u3014-\u301F\u3030\u303D\u30A0\u30FB\uA4FE\uA4FF\uA60D-\uA60F\uA673\uA67E\uA6F2-\uA6F7\uA874-\uA877\uA8CE\uA8CF\uA8F8-\uA8FA\uA8FC\uA92E\uA92F\uA95F\uA9C1-\uA9CD\uA9DE\uA9DF\uAA5C-\uAA5F\uAADE\uAADF\uAAF0\uAAF1\uABEB\uFD3E\uFD3F\uFE10-\uFE19\uFE30-\uFE52\uFE54-\uFE61\uFE63\uFE68\uFE6A\uFE6B\uFF01-\uFF03\uFF05-\uFF0A\uFF0C-\uFF0F\uFF1A\uFF1B\uFF1F\uFF20\uFF3B-\uFF3D\uFF3F\uFF5B\uFF5D\uFF5F-\uFF65]|\uD800[\uDD00-\uDD02\uDF9F\uDFD0]|\uD801\uDD6F|\uD802[\uDC57\uDD1F\uDD3F\uDE50-\uDE58\uDE7F\uDEF0-\uDEF6\uDF39-\uDF3F\uDF99-\uDF9C]|\uD804[\uDC47-\uDC4D\uDCBB\uDCBC\uDCBE-\uDCC1\uDD40-\uDD43\uDD74\uDD75\uDDC5-\uDDC9\uDDCD\uDDDB\uDDDD-\uDDDF\uDE38-\uDE3D\uDEA9]|\uD805[\uDCC6\uDDC1-\uDDD7\uDE41-\uDE43\uDF3C-\uDF3E]|\uD809[\uDC70-\uDC74]|\uD81A[\uDE6E\uDE6F\uDEF5\uDF37-\uDF3B\uDF44]|\uD82F\uDC9F|\uD836[\uDE87-\uDE8B]/;function g(e,t,n){return t.f=t.inline=n,n(e,t)}function v(e,t,n){return t.f=t.block=n,n(e,t)}function x(t){if(t.linkTitle=!1,t.linkHref=!1,t.linkText=!1,t.em=!1,t.strong=!1,t.strikethrough=!1,t.quote=0,t.indentedCode=!1,t.f==b){var n=r;if(!n){var o=e.innerMode(i,t.htmlState);n="xml"==o.mode.name&&null===o.state.tagStart&&!o.state.context&&o.state.tokenize.isInText}n&&(t.f=k,t.block=y,t.htmlState=null)}return t.trailingSpace=0,t.trailingSpaceNewLine=!1,t.prevLine=t.thisLine,t.thisLine={stream:null},null}function y(i,r){var a,h=i.column()===r.indentation,m=!(a=r.prevLine.stream)||!/\S/.test(a.string),v=r.indentedCode,x=r.prevLine.hr,y=!1!==r.list,b=(r.listStack[r.listStack.length-1]||0)+3;r.indentedCode=!1;var w=r.indentation;if(null===r.indentationDiff&&(r.indentationDiff=r.indentation,y)){for(r.list=null;w=4&&(v||r.prevLine.fencedCodeEnd||r.prevLine.header||m))return i.skipToEnd(),r.indentedCode=!0,o.code;if(i.eatSpace())return null;if(h&&r.indentation<=b&&(F=i.match(c))&&F[1].length<=6)return r.quote=0,r.header=F[1].length,r.thisLine.header=!0,n.highlightFormatting&&(r.formatting="header"),r.f=r.inline,C(r);if(r.indentation<=b&&i.eat(">"))return r.quote=h?1:r.quote+1,n.highlightFormatting&&(r.formatting="quote"),i.eatSpace(),C(r);if(!S&&!r.setext&&h&&r.indentation<=b&&(F=i.match(s))){var A=F[1]?"ol":"ul";return r.indentation=w+i.current().length,r.list=!0,r.quote=0,r.listStack.push(r.indentation),r.em=!1,r.strong=!1,r.code=!1,r.strikethrough=!1,n.taskLists&&i.match(u,!1)&&(r.taskList=!0),r.f=r.inline,n.highlightFormatting&&(r.formatting=["list","list-"+A]),C(r)}return h&&r.indentation<=b&&(F=i.match(f,!0))?(r.quote=0,r.fencedEndRE=new RegExp(F[1]+"+ *$"),r.localMode=n.fencedCodeBlockHighlighting&&function(n){if(e.findModeByName){var i=e.findModeByName(n);i&&(n=i.mime||i.mimes[0])}var r=e.getMode(t,n);return"null"==r.name?null:r}(F[2]||n.fencedCodeBlockDefaultMode),r.localMode&&(r.localState=e.startState(r.localMode)),r.f=r.block=D,n.highlightFormatting&&(r.formatting="code-block"),r.code=-1,C(r)):r.setext||!(k&&y||r.quote||!1!==r.list||r.code||S||p.test(i.string))&&(F=i.lookAhead(1))&&(F=F.match(d))?(r.setext?(r.header=r.setext,r.setext=0,i.skipToEnd(),n.highlightFormatting&&(r.formatting="header")):(r.header="="==F[0].charAt(0)?1:2,r.setext=r.header),r.thisLine.header=!0,r.f=r.inline,C(r)):S?(i.skipToEnd(),r.hr=!0,r.thisLine.hr=!0,o.hr):"["===i.peek()?g(i,r,E):g(i,r,r.inline)}function b(t,n){var o=i.token(t,n.htmlState);if(!r){var a=e.innerMode(i,n.htmlState);("xml"==a.mode.name&&null===a.state.tagStart&&!a.state.context&&a.state.tokenize.isInText||n.md_inside&&t.current().indexOf(">")>-1)&&(n.f=k,n.block=y,n.htmlState=null)}return o}function D(e,t){var i,r=t.listStack[t.listStack.length-1]||0,a=t.indentation=e.quote?t.push(o.formatting+"-"+e.formatting[i]+"-"+e.quote):t.push("error"))}if(e.taskOpen)return t.push("meta"),t.length?t.join(" "):null;if(e.taskClosed)return t.push("property"),t.length?t.join(" "):null;if(e.linkHref?t.push(o.linkHref,"url"):(e.strong&&t.push(o.strong),e.em&&t.push(o.em),e.strikethrough&&t.push(o.strikethrough),e.emoji&&t.push(o.emoji),e.linkText&&t.push(o.linkText),e.code&&t.push(o.code),e.image&&t.push(o.image),e.imageAltText&&t.push(o.imageAltText,"link"),e.imageMarker&&t.push(o.imageMarker)),e.header&&t.push(o.header,o.header+"-"+e.header),e.quote&&(t.push(o.quote),!n.maxBlockquoteDepth||n.maxBlockquoteDepth>=e.quote?t.push(o.quote+"-"+e.quote):t.push(o.quote+"-"+n.maxBlockquoteDepth)),!1!==e.list){var r=(e.listStack.length-1)%3;r?1===r?t.push(o.list2):t.push(o.list3):t.push(o.list1)}return e.trailingSpaceNewLine?t.push("trailing-space-new-line"):e.trailingSpace&&t.push("trailing-space-"+(e.trailingSpace%2?"a":"b")),t.length?t.join(" "):null}function w(e,t){if(e.match(h,!0))return C(t)}function k(t,r){var a=r.text(t,r);if(void 0!==a)return a;if(r.list)return r.list=null,C(r);if(r.taskList)return" "===t.match(u,!0)[1]?r.taskOpen=!0:r.taskClosed=!0,n.highlightFormatting&&(r.formatting="task"),r.taskList=!1,C(r);if(r.taskOpen=!1,r.taskClosed=!1,r.header&&t.match(/^#+$/,!0))return n.highlightFormatting&&(r.formatting="header"),C(r);var l=t.next();if(r.linkTitle){r.linkTitle=!1;var s=l;"("===l&&(s=")");var c="^\\s*(?:[^"+(s=(s+"").replace(/([.?*+^\[\]\\(){}|-])/g,"\\$1"))+"\\\\]+|\\\\\\\\|\\\\.)"+s;if(t.match(new RegExp(c),!0))return o.linkHref}if("`"===l){var d=r.formatting;n.highlightFormatting&&(r.formatting="code"),t.eatWhile("`");var h=t.current().length;if(0!=r.code||r.quote&&1!=h){if(h==r.code){var f=C(r);return r.code=0,f}return r.formatting=d,C(r)}return r.code=h,C(r)}if(r.code)return C(r);if("\\"===l&&(t.next(),n.highlightFormatting)){var p=C(r),g=o.formatting+"-escape";return p?p+" "+g:g}if("!"===l&&t.match(/\[[^\]]*\] ?(?:\(|\[)/,!1))return r.imageMarker=!0,r.image=!0,n.highlightFormatting&&(r.formatting="image"),C(r);if("["===l&&r.imageMarker&&t.match(/[^\]]*\](\(.*?\)| ?\[.*?\])/,!1))return r.imageMarker=!1,r.imageAltText=!0,n.highlightFormatting&&(r.formatting="image"),C(r);if("]"===l&&r.imageAltText){n.highlightFormatting&&(r.formatting="image");var p=C(r);return r.imageAltText=!1,r.image=!1,r.inline=r.f=F,p}if("["===l&&!r.image)return r.linkText&&t.match(/^.*?\]/)||(r.linkText=!0,n.highlightFormatting&&(r.formatting="link")),C(r);if("]"===l&&r.linkText){n.highlightFormatting&&(r.formatting="link");var p=C(r);return r.linkText=!1,r.inline=r.f=t.match(/\(.*?\)| ?\[.*?\]/,!1)?F:k,p}if("<"===l&&t.match(/^(https?|ftps?):\/\/(?:[^\\>]|\\.)+>/,!1))return r.f=r.inline=S,n.highlightFormatting&&(r.formatting="link"),(p=C(r))?p+=" ":p="",p+o.linkInline;if("<"===l&&t.match(/^[^> \\]+@(?:[^\\>]|\\.)+>/,!1))return r.f=r.inline=S,n.highlightFormatting&&(r.formatting="link"),(p=C(r))?p+=" ":p="",p+o.linkEmail;if(n.xml&&"<"===l&&t.match(/^(!--|\?|!\[CDATA\[|[a-z][a-z0-9-]*(?:\s+[a-z_:.\-]+(?:\s*=\s*[^>]+)?)*\s*(?:>|$))/i,!1)){var x=t.string.indexOf(">",t.pos);if(-1!=x){var y=t.string.substring(t.start,x);/markdown\s*=\s*('|"){0,1}1('|"){0,1}/.test(y)&&(r.md_inside=!0)}return t.backUp(1),r.htmlState=e.startState(i),v(t,r,b)}if(n.xml&&"<"===l&&t.match(/^\/\w*?>/))return r.md_inside=!1,"tag";if("*"===l||"_"===l){for(var D=1,w=1==t.pos?" ":t.string.charAt(t.pos-2);D<3&&t.eat(l);)D++;var A=t.peek()||" ",E=!/\s/.test(A)&&(!m.test(A)||/\s/.test(w)||m.test(w)),L=!/\s/.test(w)&&(!m.test(w)||/\s/.test(A)||m.test(A)),T=null,M=null;if(D%2&&(r.em||!E||"*"!==l&&L&&!m.test(w)?r.em!=l||!L||"*"!==l&&E&&!m.test(A)||(T=!1):T=!0),D>1&&(r.strong||!E||"*"!==l&&L&&!m.test(w)?r.strong!=l||!L||"*"!==l&&E&&!m.test(A)||(M=!1):M=!0),null!=M||null!=T)return n.highlightFormatting&&(r.formatting=null==T?"strong":null==M?"em":"strong em"),!0===T&&(r.em=l),!0===M&&(r.strong=l),f=C(r),!1===T&&(r.em=!1),!1===M&&(r.strong=!1),f}else if(" "===l&&(t.eat("*")||t.eat("_"))){if(" "===t.peek())return C(r);t.backUp(1)}if(n.strikethrough)if("~"===l&&t.eatWhile(l)){if(r.strikethrough)return n.highlightFormatting&&(r.formatting="strikethrough"),f=C(r),r.strikethrough=!1,f;if(t.match(/^[^\s]/,!1))return r.strikethrough=!0,n.highlightFormatting&&(r.formatting="strikethrough"),C(r)}else if(" "===l&&t.match("~~",!0)){if(" "===t.peek())return C(r);t.backUp(2)}if(n.emoji&&":"===l&&t.match(/^(?:[a-z_\d+][a-z_\d+-]*|\-[a-z_\d+][a-z_\d+-]*):/)){r.emoji=!0,n.highlightFormatting&&(r.formatting="emoji");var B=C(r);return r.emoji=!1,B}return" "===l&&(t.match(/^ +$/,!1)?r.trailingSpace++:r.trailingSpace&&(r.trailingSpaceNewLine=!0)),C(r)}function S(e,t){if(">"===e.next()){t.f=t.inline=k,n.highlightFormatting&&(t.formatting="link");var i=C(t);return i?i+=" ":i="",i+o.linkInline}return e.match(/^[^>]+/,!0),o.linkInline}function F(e,t){if(e.eatSpace())return null;var i,r=e.next();return"("===r||"["===r?(t.f=t.inline=(i="("===r?")":"]",function(e,t){if(e.next()===i){t.f=t.inline=k,n.highlightFormatting&&(t.formatting="link-string");var r=C(t);return t.linkHref=!1,r}return e.match(A[i]),t.linkHref=!0,C(t)}),n.highlightFormatting&&(t.formatting="link-string"),t.linkHref=!0,C(t)):"error"}var A={")":/^(?:[^\\\(\)]|\\.|\((?:[^\\\(\)]|\\.)*\))*?(?=\))/,"]":/^(?:[^\\\[\]]|\\.|\[(?:[^\\\[\]]|\\.)*\])*?(?=\])/};function E(e,t){return e.match(/^([^\]\\]|\\.)*\]:/,!1)?(t.f=L,e.next(),n.highlightFormatting&&(t.formatting="link"),t.linkText=!0,C(t)):g(e,t,k)}function L(e,t){if(e.match("]:",!0)){t.f=t.inline=T,n.highlightFormatting&&(t.formatting="link");var i=C(t);return t.linkText=!1,i}return e.match(/^([^\]\\]|\\.)+/,!0),o.linkText}function T(e,t){return e.eatSpace()?null:(e.match(/^[^\s]+/,!0),void 0===e.peek()?t.linkTitle=!0:e.match(/^(?:\s+(?:"(?:[^"\\]|\\.)+"|'(?:[^'\\]|\\.)+'|\((?:[^)\\]|\\.)+\)))?/,!0),t.f=t.inline=k,o.linkHref+" url")}var M={startState:function(){return{f:y,prevLine:{stream:null},thisLine:{stream:null},block:y,htmlState:null,indentation:0,inline:k,text:w,formatting:!1,linkText:!1,linkHref:!1,linkTitle:!1,code:0,em:!1,strong:!1,header:0,setext:0,hr:!1,taskList:!1,list:!1,listStack:[],quote:0,trailingSpace:0,trailingSpaceNewLine:!1,strikethrough:!1,emoji:!1,fencedEndRE:null}},copyState:function(t){return{f:t.f,prevLine:t.prevLine,thisLine:t.thisLine,block:t.block,htmlState:t.htmlState&&e.copyState(i,t.htmlState),indentation:t.indentation,localMode:t.localMode,localState:t.localMode?e.copyState(t.localMode,t.localState):null,inline:t.inline,text:t.text,formatting:!1,linkText:t.linkText,linkTitle:t.linkTitle,linkHref:t.linkHref,code:t.code,em:t.em,strong:t.strong,strikethrough:t.strikethrough,emoji:t.emoji,header:t.header,setext:t.setext,hr:t.hr,taskList:t.taskList,list:t.list,listStack:t.listStack.slice(0),quote:t.quote,indentedCode:t.indentedCode,trailingSpace:t.trailingSpace,trailingSpaceNewLine:t.trailingSpaceNewLine,md_inside:t.md_inside,fencedEndRE:t.fencedEndRE}},token:function(e,t){if(t.formatting=!1,e!=t.thisLine.stream){if(t.header=0,t.hr=!1,e.match(/^\s*$/,!0))return x(t),null;if(t.prevLine=t.thisLine,t.thisLine={stream:e},t.taskList=!1,t.trailingSpace=0,t.trailingSpaceNewLine=!1,!t.localState&&(t.f=t.block,t.f!=b)){var n=e.match(/^\s*/,!0)[0].replace(/\t/g," ").length;if(t.indentation=n,t.indentationDiff=null,n>0)return null}}return t.f(e,t)},innerMode:function(e){return e.block==b?{state:e.htmlState,mode:i}:e.localState?{state:e.localState,mode:e.localMode}:{state:e,mode:M}},indent:function(t,n,r){return t.block==b&&i.indent?i.indent(t.htmlState,n,r):t.localState&&t.localMode.indent?t.localMode.indent(t.localState,n,r):e.Pass},blankLine:x,getType:C,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",closeBrackets:"()[]{}''\"\"``",fold:"markdown"};return M}),"xml"),e.defineMIME("text/markdown","markdown"),e.defineMIME("text/x-markdown","markdown")},"object"==typeof n&&"object"==typeof t?i(e("../../lib/codemirror"),e("../xml/xml"),e("../meta")):i(CodeMirror)},{"../../lib/codemirror":10,"../meta":13,"../xml/xml":14}],13:[function(e,t,n){(function(e){"use strict";e.modeInfo=[{name:"APL",mime:"text/apl",mode:"apl",ext:["dyalog","apl"]},{name:"PGP",mimes:["application/pgp","application/pgp-encrypted","application/pgp-keys","application/pgp-signature"],mode:"asciiarmor",ext:["asc","pgp","sig"]},{name:"ASN.1",mime:"text/x-ttcn-asn",mode:"asn.1",ext:["asn","asn1"]},{name:"Asterisk",mime:"text/x-asterisk",mode:"asterisk",file:/^extensions\.conf$/i},{name:"Brainfuck",mime:"text/x-brainfuck",mode:"brainfuck",ext:["b","bf"]},{name:"C",mime:"text/x-csrc",mode:"clike",ext:["c","h","ino"]},{name:"C++",mime:"text/x-c++src",mode:"clike",ext:["cpp","c++","cc","cxx","hpp","h++","hh","hxx"],alias:["cpp"]},{name:"Cobol",mime:"text/x-cobol",mode:"cobol",ext:["cob","cpy","cbl"]},{name:"C#",mime:"text/x-csharp",mode:"clike",ext:["cs"],alias:["csharp","cs"]},{name:"Clojure",mime:"text/x-clojure",mode:"clojure",ext:["clj","cljc","cljx"]},{name:"ClojureScript",mime:"text/x-clojurescript",mode:"clojure",ext:["cljs"]},{name:"Closure Stylesheets (GSS)",mime:"text/x-gss",mode:"css",ext:["gss"]},{name:"CMake",mime:"text/x-cmake",mode:"cmake",ext:["cmake","cmake.in"],file:/^CMakeLists\.txt$/},{name:"CoffeeScript",mimes:["application/vnd.coffeescript","text/coffeescript","text/x-coffeescript"],mode:"coffeescript",ext:["coffee"],alias:["coffee","coffee-script"]},{name:"Common Lisp",mime:"text/x-common-lisp",mode:"commonlisp",ext:["cl","lisp","el"],alias:["lisp"]},{name:"Cypher",mime:"application/x-cypher-query",mode:"cypher",ext:["cyp","cypher"]},{name:"Cython",mime:"text/x-cython",mode:"python",ext:["pyx","pxd","pxi"]},{name:"Crystal",mime:"text/x-crystal",mode:"crystal",ext:["cr"]},{name:"CSS",mime:"text/css",mode:"css",ext:["css"]},{name:"CQL",mime:"text/x-cassandra",mode:"sql",ext:["cql"]},{name:"D",mime:"text/x-d",mode:"d",ext:["d"]},{name:"Dart",mimes:["application/dart","text/x-dart"],mode:"dart",ext:["dart"]},{name:"diff",mime:"text/x-diff",mode:"diff",ext:["diff","patch"]},{name:"Django",mime:"text/x-django",mode:"django"},{name:"Dockerfile",mime:"text/x-dockerfile",mode:"dockerfile",file:/^Dockerfile$/},{name:"DTD",mime:"application/xml-dtd",mode:"dtd",ext:["dtd"]},{name:"Dylan",mime:"text/x-dylan",mode:"dylan",ext:["dylan","dyl","intr"]},{name:"EBNF",mime:"text/x-ebnf",mode:"ebnf"},{name:"ECL",mime:"text/x-ecl",mode:"ecl",ext:["ecl"]},{name:"edn",mime:"application/edn",mode:"clojure",ext:["edn"]},{name:"Eiffel",mime:"text/x-eiffel",mode:"eiffel",ext:["e"]},{name:"Elm",mime:"text/x-elm",mode:"elm",ext:["elm"]},{name:"Embedded JavaScript",mime:"application/x-ejs",mode:"htmlembedded",ext:["ejs"]},{name:"Embedded Ruby",mime:"application/x-erb",mode:"htmlembedded",ext:["erb"]},{name:"Erlang",mime:"text/x-erlang",mode:"erlang",ext:["erl"]},{name:"Esper",mime:"text/x-esper",mode:"sql"},{name:"Factor",mime:"text/x-factor",mode:"factor",ext:["factor"]},{name:"FCL",mime:"text/x-fcl",mode:"fcl"},{name:"Forth",mime:"text/x-forth",mode:"forth",ext:["forth","fth","4th"]},{name:"Fortran",mime:"text/x-fortran",mode:"fortran",ext:["f","for","f77","f90","f95"]},{name:"F#",mime:"text/x-fsharp",mode:"mllike",ext:["fs"],alias:["fsharp"]},{name:"Gas",mime:"text/x-gas",mode:"gas",ext:["s"]},{name:"Gherkin",mime:"text/x-feature",mode:"gherkin",ext:["feature"]},{name:"GitHub Flavored Markdown",mime:"text/x-gfm",mode:"gfm",file:/^(readme|contributing|history)\.md$/i},{name:"Go",mime:"text/x-go",mode:"go",ext:["go"]},{name:"Groovy",mime:"text/x-groovy",mode:"groovy",ext:["groovy","gradle"],file:/^Jenkinsfile$/},{name:"HAML",mime:"text/x-haml",mode:"haml",ext:["haml"]},{name:"Haskell",mime:"text/x-haskell",mode:"haskell",ext:["hs"]},{name:"Haskell (Literate)",mime:"text/x-literate-haskell",mode:"haskell-literate",ext:["lhs"]},{name:"Haxe",mime:"text/x-haxe",mode:"haxe",ext:["hx"]},{name:"HXML",mime:"text/x-hxml",mode:"haxe",ext:["hxml"]},{name:"ASP.NET",mime:"application/x-aspx",mode:"htmlembedded",ext:["aspx"],alias:["asp","aspx"]},{name:"HTML",mime:"text/html",mode:"htmlmixed",ext:["html","htm","handlebars","hbs"],alias:["xhtml"]},{name:"HTTP",mime:"message/http",mode:"http"},{name:"IDL",mime:"text/x-idl",mode:"idl",ext:["pro"]},{name:"Pug",mime:"text/x-pug",mode:"pug",ext:["jade","pug"],alias:["jade"]},{name:"Java",mime:"text/x-java",mode:"clike",ext:["java"]},{name:"Java Server Pages",mime:"application/x-jsp",mode:"htmlembedded",ext:["jsp"],alias:["jsp"]},{name:"JavaScript",mimes:["text/javascript","text/ecmascript","application/javascript","application/x-javascript","application/ecmascript"],mode:"javascript",ext:["js"],alias:["ecmascript","js","node"]},{name:"JSON",mimes:["application/json","application/x-json"],mode:"javascript",ext:["json","map"],alias:["json5"]},{name:"JSON-LD",mime:"application/ld+json",mode:"javascript",ext:["jsonld"],alias:["jsonld"]},{name:"JSX",mime:"text/jsx",mode:"jsx",ext:["jsx"]},{name:"Jinja2",mime:"text/jinja2",mode:"jinja2",ext:["j2","jinja","jinja2"]},{name:"Julia",mime:"text/x-julia",mode:"julia",ext:["jl"],alias:["jl"]},{name:"Kotlin",mime:"text/x-kotlin",mode:"clike",ext:["kt"]},{name:"LESS",mime:"text/x-less",mode:"css",ext:["less"]},{name:"LiveScript",mime:"text/x-livescript",mode:"livescript",ext:["ls"],alias:["ls"]},{name:"Lua",mime:"text/x-lua",mode:"lua",ext:["lua"]},{name:"Markdown",mime:"text/x-markdown",mode:"markdown",ext:["markdown","md","mkd"]},{name:"mIRC",mime:"text/mirc",mode:"mirc"},{name:"MariaDB SQL",mime:"text/x-mariadb",mode:"sql"},{name:"Mathematica",mime:"text/x-mathematica",mode:"mathematica",ext:["m","nb","wl","wls"]},{name:"Modelica",mime:"text/x-modelica",mode:"modelica",ext:["mo"]},{name:"MUMPS",mime:"text/x-mumps",mode:"mumps",ext:["mps"]},{name:"MS SQL",mime:"text/x-mssql",mode:"sql"},{name:"mbox",mime:"application/mbox",mode:"mbox",ext:["mbox"]},{name:"MySQL",mime:"text/x-mysql",mode:"sql"},{name:"Nginx",mime:"text/x-nginx-conf",mode:"nginx",file:/nginx.*\.conf$/i},{name:"NSIS",mime:"text/x-nsis",mode:"nsis",ext:["nsh","nsi"]},{name:"NTriples",mimes:["application/n-triples","application/n-quads","text/n-triples"],mode:"ntriples",ext:["nt","nq"]},{name:"Objective-C",mime:"text/x-objectivec",mode:"clike",ext:["m"],alias:["objective-c","objc"]},{name:"Objective-C++",mime:"text/x-objectivec++",mode:"clike",ext:["mm"],alias:["objective-c++","objc++"]},{name:"OCaml",mime:"text/x-ocaml",mode:"mllike",ext:["ml","mli","mll","mly"]},{name:"Octave",mime:"text/x-octave",mode:"octave",ext:["m"]},{name:"Oz",mime:"text/x-oz",mode:"oz",ext:["oz"]},{name:"Pascal",mime:"text/x-pascal",mode:"pascal",ext:["p","pas"]},{name:"PEG.js",mime:"null",mode:"pegjs",ext:["jsonld"]},{name:"Perl",mime:"text/x-perl",mode:"perl",ext:["pl","pm"]},{name:"PHP",mimes:["text/x-php","application/x-httpd-php","application/x-httpd-php-open"],mode:"php",ext:["php","php3","php4","php5","php7","phtml"]},{name:"Pig",mime:"text/x-pig",mode:"pig",ext:["pig"]},{name:"Plain Text",mime:"text/plain",mode:"null",ext:["txt","text","conf","def","list","log"]},{name:"PLSQL",mime:"text/x-plsql",mode:"sql",ext:["pls"]},{name:"PostgreSQL",mime:"text/x-pgsql",mode:"sql"},{name:"PowerShell",mime:"application/x-powershell",mode:"powershell",ext:["ps1","psd1","psm1"]},{name:"Properties files",mime:"text/x-properties",mode:"properties",ext:["properties","ini","in"],alias:["ini","properties"]},{name:"ProtoBuf",mime:"text/x-protobuf",mode:"protobuf",ext:["proto"]},{name:"Python",mime:"text/x-python",mode:"python",ext:["BUILD","bzl","py","pyw"],file:/^(BUCK|BUILD)$/},{name:"Puppet",mime:"text/x-puppet",mode:"puppet",ext:["pp"]},{name:"Q",mime:"text/x-q",mode:"q",ext:["q"]},{name:"R",mime:"text/x-rsrc",mode:"r",ext:["r","R"],alias:["rscript"]},{name:"reStructuredText",mime:"text/x-rst",mode:"rst",ext:["rst"],alias:["rst"]},{name:"RPM Changes",mime:"text/x-rpm-changes",mode:"rpm"},{name:"RPM Spec",mime:"text/x-rpm-spec",mode:"rpm",ext:["spec"]},{name:"Ruby",mime:"text/x-ruby",mode:"ruby",ext:["rb"],alias:["jruby","macruby","rake","rb","rbx"]},{name:"Rust",mime:"text/x-rustsrc",mode:"rust",ext:["rs"]},{name:"SAS",mime:"text/x-sas",mode:"sas",ext:["sas"]},{name:"Sass",mime:"text/x-sass",mode:"sass",ext:["sass"]},{name:"Scala",mime:"text/x-scala",mode:"clike",ext:["scala"]},{name:"Scheme",mime:"text/x-scheme",mode:"scheme",ext:["scm","ss"]},{name:"SCSS",mime:"text/x-scss",mode:"css",ext:["scss"]},{name:"Shell",mimes:["text/x-sh","application/x-sh"],mode:"shell",ext:["sh","ksh","bash"],alias:["bash","sh","zsh"],file:/^PKGBUILD$/},{name:"Sieve",mime:"application/sieve",mode:"sieve",ext:["siv","sieve"]},{name:"Slim",mimes:["text/x-slim","application/x-slim"],mode:"slim",ext:["slim"]},{name:"Smalltalk",mime:"text/x-stsrc",mode:"smalltalk",ext:["st"]},{name:"Smarty",mime:"text/x-smarty",mode:"smarty",ext:["tpl"]},{name:"Solr",mime:"text/x-solr",mode:"solr"},{name:"SML",mime:"text/x-sml",mode:"mllike",ext:["sml","sig","fun","smackspec"]},{name:"Soy",mime:"text/x-soy",mode:"soy",ext:["soy"],alias:["closure template"]},{name:"SPARQL",mime:"application/sparql-query",mode:"sparql",ext:["rq","sparql"],alias:["sparul"]},{name:"Spreadsheet",mime:"text/x-spreadsheet",mode:"spreadsheet",alias:["excel","formula"]},{name:"SQL",mime:"text/x-sql",mode:"sql",ext:["sql"]},{name:"SQLite",mime:"text/x-sqlite",mode:"sql"},{name:"Squirrel",mime:"text/x-squirrel",mode:"clike",ext:["nut"]},{name:"Stylus",mime:"text/x-styl",mode:"stylus",ext:["styl"]},{name:"Swift",mime:"text/x-swift",mode:"swift",ext:["swift"]},{name:"sTeX",mime:"text/x-stex",mode:"stex"},{name:"LaTeX",mime:"text/x-latex",mode:"stex",ext:["text","ltx","tex"],alias:["tex"]},{name:"SystemVerilog",mime:"text/x-systemverilog",mode:"verilog",ext:["v","sv","svh"]},{name:"Tcl",mime:"text/x-tcl",mode:"tcl",ext:["tcl"]},{name:"Textile",mime:"text/x-textile",mode:"textile",ext:["textile"]},{name:"TiddlyWiki",mime:"text/x-tiddlywiki",mode:"tiddlywiki"},{name:"Tiki wiki",mime:"text/tiki",mode:"tiki"},{name:"TOML",mime:"text/x-toml",mode:"toml",ext:["toml"]},{name:"Tornado",mime:"text/x-tornado",mode:"tornado"},{name:"troff",mime:"text/troff",mode:"troff",ext:["1","2","3","4","5","6","7","8","9"]},{name:"TTCN",mime:"text/x-ttcn",mode:"ttcn",ext:["ttcn","ttcn3","ttcnpp"]},{name:"TTCN_CFG",mime:"text/x-ttcn-cfg",mode:"ttcn-cfg",ext:["cfg"]},{name:"Turtle",mime:"text/turtle",mode:"turtle",ext:["ttl"]},{name:"TypeScript",mime:"application/typescript",mode:"javascript",ext:["ts"],alias:["ts"]},{name:"TypeScript-JSX",mime:"text/typescript-jsx",mode:"jsx",ext:["tsx"],alias:["tsx"]},{name:"Twig",mime:"text/x-twig",mode:"twig"},{name:"Web IDL",mime:"text/x-webidl",mode:"webidl",ext:["webidl"]},{name:"VB.NET",mime:"text/x-vb",mode:"vb",ext:["vb"]},{name:"VBScript",mime:"text/vbscript",mode:"vbscript",ext:["vbs"]},{name:"Velocity",mime:"text/velocity",mode:"velocity",ext:["vtl"]},{name:"Verilog",mime:"text/x-verilog",mode:"verilog",ext:["v"]},{name:"VHDL",mime:"text/x-vhdl",mode:"vhdl",ext:["vhd","vhdl"]},{name:"Vue.js Component",mimes:["script/x-vue","text/x-vue"],mode:"vue",ext:["vue"]},{name:"XML",mimes:["application/xml","text/xml"],mode:"xml",ext:["xml","xsl","xsd","svg"],alias:["rss","wsdl","xsd"]},{name:"XQuery",mime:"application/xquery",mode:"xquery",ext:["xy","xquery"]},{name:"Yacas",mime:"text/x-yacas",mode:"yacas",ext:["ys"]},{name:"YAML",mimes:["text/x-yaml","text/yaml"],mode:"yaml",ext:["yaml","yml"],alias:["yml"]},{name:"Z80",mime:"text/x-z80",mode:"z80",ext:["z80"]},{name:"mscgen",mime:"text/x-mscgen",mode:"mscgen",ext:["mscgen","mscin","msc"]},{name:"xu",mime:"text/x-xu",mode:"mscgen",ext:["xu"]},{name:"msgenny",mime:"text/x-msgenny",mode:"mscgen",ext:["msgenny"]},{name:"WebAssembly",mime:"text/webassembly",mode:"wast",ext:["wat","wast"]}];for(var t=0;t-1&&t.substring(r+1,t.length);if(o)return e.findModeByExtension(o)},e.findModeByName=function(t){t=t.toLowerCase();for(var n=0;n")):null:e.match("--")?n(f("comment","--\x3e")):e.match("DOCTYPE",!0,!0)?(e.eatWhile(/[\w\._\-]/),n(p(1))):null:e.eat("?")?(e.eatWhile(/[\w\._\-]/),t.tokenize=f("meta","?>"),"meta"):(o=e.eat("/")?"closeTag":"openTag",t.tokenize=h,"tag bracket"):"&"==i?(e.eat("#")?e.eat("x")?e.eatWhile(/[a-fA-F\d]/)&&e.eat(";"):e.eatWhile(/[\d]/)&&e.eat(";"):e.eatWhile(/[\w\.\-:]/)&&e.eat(";"))?"atom":"error":(e.eatWhile(/[^&<]/),null)}function h(e,t){var n,i,r=e.next();if(">"==r||"/"==r&&e.eat(">"))return t.tokenize=d,o=">"==r?"endTag":"selfcloseTag","tag bracket";if("="==r)return o="equals",null;if("<"==r){t.tokenize=d,t.state=y,t.tagName=t.tagStart=null;var a=t.tokenize(e,t);return a?a+" tag error":"tag error"}return/[\'\"]/.test(r)?(t.tokenize=(n=r,i=function(e,t){for(;!e.eol();)if(e.next()==n){t.tokenize=h;break}return"string"},i.isInAttribute=!0,i),t.stringStartCol=e.column(),t.tokenize(e,t)):(e.match(/^[^\s\u00a0=<>\"\']*[^\s\u00a0=<>\"\'\/]/),"word")}function f(e,t){return function(n,i){for(;!n.eol();){if(n.match(t)){i.tokenize=d;break}n.next()}return e}}function p(e){return function(t,n){for(var i;null!=(i=t.next());){if("<"==i)return n.tokenize=p(e+1),n.tokenize(t,n);if(">"==i){if(1==e){n.tokenize=d;break}return n.tokenize=p(e-1),n.tokenize(t,n)}}return"meta"}}function m(e){return e&&e.toLowerCase()}function g(e,t,n){this.prev=e.context,this.tagName=t||"",this.indent=e.indented,this.startOfLine=n,(s.doNotIndent.hasOwnProperty(t)||e.context&&e.context.noIndent)&&(this.noIndent=!0)}function v(e){e.context&&(e.context=e.context.prev)}function x(e,t){for(var n;;){if(!e.context)return;if(n=e.context.tagName,!s.contextGrabbers.hasOwnProperty(m(n))||!s.contextGrabbers[m(n)].hasOwnProperty(m(t)))return;v(e)}}function y(e,t,n){return"openTag"==e?(n.tagStart=t.column(),b):"closeTag"==e?D:y}function b(e,t,n){return"word"==e?(n.tagName=t.current(),a="tag",k):s.allowMissingTagName&&"endTag"==e?(a="tag bracket",k(e,0,n)):(a="error",b)}function D(e,t,n){if("word"==e){var i=t.current();return n.context&&n.context.tagName!=i&&s.implicitlyClosed.hasOwnProperty(m(n.context.tagName))&&v(n),n.context&&n.context.tagName==i||!1===s.matchClosing?(a="tag",C):(a="tag error",w)}return s.allowMissingTagName&&"endTag"==e?(a="tag bracket",C(e,0,n)):(a="error",w)}function C(e,t,n){return"endTag"!=e?(a="error",C):(v(n),y)}function w(e,t,n){return a="error",C(e,0,n)}function k(e,t,n){if("word"==e)return a="attribute",S;if("endTag"==e||"selfcloseTag"==e){var i=n.tagName,r=n.tagStart;return n.tagName=n.tagStart=null,"selfcloseTag"==e||s.autoSelfClosers.hasOwnProperty(m(i))?x(n,i):(x(n,i),n.context=new g(n,i,r==n.indented)),y}return a="error",k}function S(e,t,n){return"equals"==e?F:(s.allowMissing||(a="error"),k(e,0,n))}function F(e,t,n){return"string"==e?A:"word"==e&&s.allowUnquoted?(a="string",k):(a="error",k(e,0,n))}function A(e,t,n){return"string"==e?A:k(e,0,n)}return d.isInText=!0,{startState:function(e){var t={tokenize:d,state:y,indented:e||0,tagName:null,tagStart:null,context:null};return null!=e&&(t.baseIndent=e),t},token:function(e,t){if(!t.tagName&&e.sol()&&(t.indented=e.indentation()),e.eatSpace())return null;o=null;var n=t.tokenize(e,t);return(n||o)&&"comment"!=n&&(a=null,t.state=t.state(o||n,e,t),a&&(n="error"==a?n+" error":a)),n},indent:function(t,n,i){var r=t.context;if(t.tokenize.isInAttribute)return t.tagStart==t.indented?t.stringStartCol+1:t.indented+l;if(r&&r.noIndent)return e.Pass;if(t.tokenize!=h&&t.tokenize!=d)return i?i.match(/^(\s*)/)[0].length:0;if(t.tagName)return!1!==s.multilineTagIndentPastTag?t.tagStart+t.tagName.length+2:t.tagStart+l*(s.multilineTagIndentFactor||1);if(s.alignCDATA&&/$/,blockCommentStart:"\x3c!--",blockCommentEnd:"--\x3e",configuration:s.htmlMode?"html":"xml",helperType:s.htmlMode?"html":"xml",skipAttribute:function(e){e.state==F&&(e.state=k)},xmlCurrentTag:function(e){return e.tagName?{name:e.tagName,close:"closeTag"==e.type}:null},xmlCurrentContext:function(e){for(var t=[],n=e.context;n;n=n.prev)t.push(n.tagName);return t.reverse()}}})),e.defineMIME("text/xml","xml"),e.defineMIME("application/xml","xml"),e.mimeModes.hasOwnProperty("text/html")||e.defineMIME("text/html",{name:"xml",htmlMode:!0})})("object"==typeof n&&"object"==typeof t?e("../../lib/codemirror"):CodeMirror)},{"../../lib/codemirror":10}],15:[function(e,t,n){!function(e,i){"object"==typeof n&&void 0!==t?i(n):i((e="undefined"!=typeof globalThis?globalThis:e||self).marked={})}(this,(function(e){"use strict";function t(e,t){for(var n=0;ne.length)&&(t=e.length);for(var n=0,i=new Array(t);n=e.length?{done:!0}:{done:!1,value:e[r++]}}}throw new TypeError("Invalid attempt to iterate non-iterable instance.\nIn order to be iterable, non-array objects must have a [Symbol.iterator]() method.")}function r(){return{async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1}}e.defaults={async:!1,baseUrl:null,breaks:!1,extensions:null,gfm:!0,headerIds:!0,headerPrefix:"",highlight:null,langPrefix:"language-",mangle:!0,pedantic:!1,renderer:null,sanitize:!1,sanitizer:null,silent:!1,smartLists:!1,smartypants:!1,tokenizer:null,walkTokens:null,xhtml:!1};var o=/[&<>"']/,a=/[&<>"']/g,l=/[<>"']|&(?!#?\w+;)/,s=/[<>"']|&(?!#?\w+;)/g,u={"&":"&","<":"<",">":">",'"':""","'":"'"},c=function(e){return u[e]};function d(e,t){if(t){if(o.test(e))return e.replace(a,c)}else if(l.test(e))return e.replace(s,c);return e}var h=/&(#(?:\d+)|(?:#x[0-9A-Fa-f]+)|(?:\w+));?/gi;function f(e){return e.replace(h,(function(e,t){return"colon"===(t=t.toLowerCase())?":":"#"===t.charAt(0)?"x"===t.charAt(1)?String.fromCharCode(parseInt(t.substring(2),16)):String.fromCharCode(+t.substring(1)):""}))}var p=/(^|[^\[])\^/g;function m(e,t){e="string"==typeof e?e:e.source,t=t||"";var n={replace:function(t,i){return i=(i=i.source||i).replace(p,"$1"),e=e.replace(t,i),n},getRegex:function(){return new RegExp(e,t)}};return n}var g=/[^\w:]/g,v=/^$|^[a-z][a-z0-9+.-]*:|^[?#]/i;function x(e,t,n){if(e){var i;try{i=decodeURIComponent(f(n)).replace(g,"").toLowerCase()}catch(e){return null}if(0===i.indexOf("javascript:")||0===i.indexOf("vbscript:")||0===i.indexOf("data:"))return null}t&&!v.test(n)&&(n=function(e,t){y[" "+e]||(b.test(e)?y[" "+e]=e+"/":y[" "+e]=F(e,"/",!0));var n=-1===(e=y[" "+e]).indexOf(":");return"//"===t.substring(0,2)?n?t:e.replace(D,"$1")+t:"/"===t.charAt(0)?n?t:e.replace(C,"$1")+t:e+t}(t,n));try{n=encodeURI(n).replace(/%25/g,"%")}catch(e){return null}return n}var y={},b=/^[^:]+:\/*[^/]*$/,D=/^([^:]+:)[\s\S]*$/,C=/^([^:]+:\/*[^/]*)[\s\S]*$/;var w={exec:function(){}};function k(e){for(var t,n,i=1;i=0&&"\\"===n[r];)i=!i;return i?"|":" |"})).split(/ \|/),i=0;if(n[0].trim()||n.shift(),n.length>0&&!n[n.length-1].trim()&&n.pop(),n.length>t)n.splice(t);else for(;n.length1;)1&t&&(n+=e),t>>=1,e+=e;return n+e}function L(e,t,n,i){var r=t.href,o=t.title?d(t.title):null,a=e[1].replace(/\\([\[\]])/g,"$1");if("!"!==e[0].charAt(0)){i.state.inLink=!0;var l={type:"link",raw:n,href:r,title:o,text:a,tokens:i.inlineTokens(a)};return i.state.inLink=!1,l}return{type:"image",raw:n,href:r,title:o,text:d(a)}}var T=function(){function t(t){this.options=t||e.defaults}var n=t.prototype;return n.space=function(e){var t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:"space",raw:t[0]}},n.code=function(e){var t=this.rules.block.code.exec(e);if(t){var n=t[0].replace(/^ {1,4}/gm,"");return{type:"code",raw:t[0],codeBlockStyle:"indented",text:this.options.pedantic?n:F(n,"\n")}}},n.fences=function(e){var t=this.rules.block.fences.exec(e);if(t){var n=t[0],i=function(e,t){var n=e.match(/^(\s+)(?:```)/);if(null===n)return t;var i=n[1];return t.split("\n").map((function(e){var t=e.match(/^\s+/);return null===t?e:t[0].length>=i.length?e.slice(i.length):e})).join("\n")}(n,t[3]||"");return{type:"code",raw:n,lang:t[2]?t[2].trim():t[2],text:i}}},n.heading=function(e){var t=this.rules.block.heading.exec(e);if(t){var n=t[2].trim();if(/#$/.test(n)){var i=F(n,"#");this.options.pedantic?n=i.trim():i&&!/ $/.test(i)||(n=i.trim())}return{type:"heading",raw:t[0],depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}},n.hr=function(e){var t=this.rules.block.hr.exec(e);if(t)return{type:"hr",raw:t[0]}},n.blockquote=function(e){var t=this.rules.block.blockquote.exec(e);if(t){var n=t[0].replace(/^ *>[ \t]?/gm,"");return{type:"blockquote",raw:t[0],tokens:this.lexer.blockTokens(n,[]),text:n}}},n.list=function(e){var t=this.rules.block.list.exec(e);if(t){var n,r,o,a,l,s,u,c,d,h,f,p,m=t[1].trim(),g=m.length>1,v={type:"list",raw:"",ordered:g,start:g?+m.slice(0,-1):"",loose:!1,items:[]};m=g?"\\d{1,9}\\"+m.slice(-1):"\\"+m,this.options.pedantic&&(m=g?m:"[*+-]");for(var x=new RegExp("^( {0,3}"+m+")((?:[\t ][^\\n]*)?(?:\\n|$))");e&&(p=!1,t=x.exec(e))&&!this.rules.block.hr.test(e);){if(n=t[0],e=e.substring(n.length),c=t[2].split("\n",1)[0],d=e.split("\n",1)[0],this.options.pedantic?(a=2,f=c.trimLeft()):(a=(a=t[2].search(/[^ ]/))>4?1:a,f=c.slice(a),a+=t[1].length),s=!1,!c&&/^ *$/.test(d)&&(n+=d+"\n",e=e.substring(d.length+1),p=!0),!p)for(var y=new RegExp("^ {0,"+Math.min(3,a-1)+"}(?:[*+-]|\\d{1,9}[.)])((?: [^\\n]*)?(?:\\n|$))"),b=new RegExp("^ {0,"+Math.min(3,a-1)+"}((?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$)"),D=new RegExp("^ {0,"+Math.min(3,a-1)+"}(?:```|~~~)"),C=new RegExp("^ {0,"+Math.min(3,a-1)+"}#");e&&(c=h=e.split("\n",1)[0],this.options.pedantic&&(c=c.replace(/^ {1,4}(?=( {4})*[^ ])/g," ")),!D.test(c))&&!C.test(c)&&!y.test(c)&&!b.test(e);){if(c.search(/[^ ]/)>=a||!c.trim())f+="\n"+c.slice(a);else{if(s)break;f+="\n"+c}s||c.trim()||(s=!0),n+=h+"\n",e=e.substring(h.length+1)}v.loose||(u?v.loose=!0:/\n *\n *$/.test(n)&&(u=!0)),this.options.gfm&&(r=/^\[[ xX]\] /.exec(f))&&(o="[ ] "!==r[0],f=f.replace(/^\[[ xX]\] +/,"")),v.items.push({type:"list_item",raw:n,task:!!r,checked:o,loose:!1,text:f}),v.raw+=n}v.items[v.items.length-1].raw=n.trimRight(),v.items[v.items.length-1].text=f.trimRight(),v.raw=v.raw.trimRight();var w=v.items.length;for(l=0;l1)return!0}return!1}));!v.loose&&k.length&&S&&(v.loose=!0,v.items[l].loose=!0)}return v}},n.html=function(e){var t=this.rules.block.html.exec(e);if(t){var n={type:"html",raw:t[0],pre:!this.options.sanitizer&&("pre"===t[1]||"script"===t[1]||"style"===t[1]),text:t[0]};if(this.options.sanitize){var i=this.options.sanitizer?this.options.sanitizer(t[0]):d(t[0]);n.type="paragraph",n.text=i,n.tokens=this.lexer.inline(i)}return n}},n.def=function(e){var t=this.rules.block.def.exec(e);if(t)return t[3]&&(t[3]=t[3].substring(1,t[3].length-1)),{type:"def",tag:t[1].toLowerCase().replace(/\s+/g," "),raw:t[0],href:t[2],title:t[3]}},n.table=function(e){var t=this.rules.block.table.exec(e);if(t){var n={type:"table",header:S(t[1]).map((function(e){return{text:e}})),align:t[2].replace(/^ *|\| *$/g,"").split(/ *\| */),rows:t[3]&&t[3].trim()?t[3].replace(/\n[ \t]*$/,"").split("\n"):[]};if(n.header.length===n.align.length){n.raw=t[0];var i,r,o,a,l=n.align.length;for(i=0;i/i.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&/^<(pre|code|kbd|script)(\s|>)/i.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&/^<\/(pre|code|kbd|script)(\s|>)/i.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:this.options.sanitize?"text":"html",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,text:this.options.sanitize?this.options.sanitizer?this.options.sanitizer(t[0]):d(t[0]):t[0]}},n.link=function(e){var t=this.rules.inline.link.exec(e);if(t){var n=t[2].trim();if(!this.options.pedantic&&/^$/.test(n))return;var i=F(n.slice(0,-1),"\\");if((n.length-i.length)%2==0)return}else{var r=function(e,t){if(-1===e.indexOf(t[1]))return-1;for(var n=e.length,i=0,r=0;r-1){var o=(0===t[0].indexOf("!")?5:4)+t[1].length+r;t[2]=t[2].substring(0,r),t[0]=t[0].substring(0,o).trim(),t[3]=""}}var a=t[2],l="";if(this.options.pedantic){var s=/^([^'"]*[^\s])\s+(['"])(.*)\2/.exec(a);s&&(a=s[1],l=s[3])}else l=t[3]?t[3].slice(1,-1):"";return a=a.trim(),/^$/.test(n)?a.slice(1):a.slice(1,-1)),L(t,{href:a?a.replace(this.rules.inline._escapes,"$1"):a,title:l?l.replace(this.rules.inline._escapes,"$1"):l},t[0],this.lexer)}},n.reflink=function(e,t){var n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){var i=(n[2]||n[1]).replace(/\s+/g," ");if(!(i=t[i.toLowerCase()])||!i.href){var r=n[0].charAt(0);return{type:"text",raw:r,text:r}}return L(n,i,n[0],this.lexer)}},n.emStrong=function(e,t,n){void 0===n&&(n="");var i=this.rules.inline.emStrong.lDelim.exec(e);if(i&&(!i[3]||!n.match(/(?:[0-9A-Za-z\xAA\xB2\xB3\xB5\xB9\xBA\xBC-\xBE\xC0-\xD6\xD8-\xF6\xF8-\u02C1\u02C6-\u02D1\u02E0-\u02E4\u02EC\u02EE\u0370-\u0374\u0376\u0377\u037A-\u037D\u037F\u0386\u0388-\u038A\u038C\u038E-\u03A1\u03A3-\u03F5\u03F7-\u0481\u048A-\u052F\u0531-\u0556\u0559\u0560-\u0588\u05D0-\u05EA\u05EF-\u05F2\u0620-\u064A\u0660-\u0669\u066E\u066F\u0671-\u06D3\u06D5\u06E5\u06E6\u06EE-\u06FC\u06FF\u0710\u0712-\u072F\u074D-\u07A5\u07B1\u07C0-\u07EA\u07F4\u07F5\u07FA\u0800-\u0815\u081A\u0824\u0828\u0840-\u0858\u0860-\u086A\u0870-\u0887\u0889-\u088E\u08A0-\u08C9\u0904-\u0939\u093D\u0950\u0958-\u0961\u0966-\u096F\u0971-\u0980\u0985-\u098C\u098F\u0990\u0993-\u09A8\u09AA-\u09B0\u09B2\u09B6-\u09B9\u09BD\u09CE\u09DC\u09DD\u09DF-\u09E1\u09E6-\u09F1\u09F4-\u09F9\u09FC\u0A05-\u0A0A\u0A0F\u0A10\u0A13-\u0A28\u0A2A-\u0A30\u0A32\u0A33\u0A35\u0A36\u0A38\u0A39\u0A59-\u0A5C\u0A5E\u0A66-\u0A6F\u0A72-\u0A74\u0A85-\u0A8D\u0A8F-\u0A91\u0A93-\u0AA8\u0AAA-\u0AB0\u0AB2\u0AB3\u0AB5-\u0AB9\u0ABD\u0AD0\u0AE0\u0AE1\u0AE6-\u0AEF\u0AF9\u0B05-\u0B0C\u0B0F\u0B10\u0B13-\u0B28\u0B2A-\u0B30\u0B32\u0B33\u0B35-\u0B39\u0B3D\u0B5C\u0B5D\u0B5F-\u0B61\u0B66-\u0B6F\u0B71-\u0B77\u0B83\u0B85-\u0B8A\u0B8E-\u0B90\u0B92-\u0B95\u0B99\u0B9A\u0B9C\u0B9E\u0B9F\u0BA3\u0BA4\u0BA8-\u0BAA\u0BAE-\u0BB9\u0BD0\u0BE6-\u0BF2\u0C05-\u0C0C\u0C0E-\u0C10\u0C12-\u0C28\u0C2A-\u0C39\u0C3D\u0C58-\u0C5A\u0C5D\u0C60\u0C61\u0C66-\u0C6F\u0C78-\u0C7E\u0C80\u0C85-\u0C8C\u0C8E-\u0C90\u0C92-\u0CA8\u0CAA-\u0CB3\u0CB5-\u0CB9\u0CBD\u0CDD\u0CDE\u0CE0\u0CE1\u0CE6-\u0CEF\u0CF1\u0CF2\u0D04-\u0D0C\u0D0E-\u0D10\u0D12-\u0D3A\u0D3D\u0D4E\u0D54-\u0D56\u0D58-\u0D61\u0D66-\u0D78\u0D7A-\u0D7F\u0D85-\u0D96\u0D9A-\u0DB1\u0DB3-\u0DBB\u0DBD\u0DC0-\u0DC6\u0DE6-\u0DEF\u0E01-\u0E30\u0E32\u0E33\u0E40-\u0E46\u0E50-\u0E59\u0E81\u0E82\u0E84\u0E86-\u0E8A\u0E8C-\u0EA3\u0EA5\u0EA7-\u0EB0\u0EB2\u0EB3\u0EBD\u0EC0-\u0EC4\u0EC6\u0ED0-\u0ED9\u0EDC-\u0EDF\u0F00\u0F20-\u0F33\u0F40-\u0F47\u0F49-\u0F6C\u0F88-\u0F8C\u1000-\u102A\u103F-\u1049\u1050-\u1055\u105A-\u105D\u1061\u1065\u1066\u106E-\u1070\u1075-\u1081\u108E\u1090-\u1099\u10A0-\u10C5\u10C7\u10CD\u10D0-\u10FA\u10FC-\u1248\u124A-\u124D\u1250-\u1256\u1258\u125A-\u125D\u1260-\u1288\u128A-\u128D\u1290-\u12B0\u12B2-\u12B5\u12B8-\u12BE\u12C0\u12C2-\u12C5\u12C8-\u12D6\u12D8-\u1310\u1312-\u1315\u1318-\u135A\u1369-\u137C\u1380-\u138F\u13A0-\u13F5\u13F8-\u13FD\u1401-\u166C\u166F-\u167F\u1681-\u169A\u16A0-\u16EA\u16EE-\u16F8\u1700-\u1711\u171F-\u1731\u1740-\u1751\u1760-\u176C\u176E-\u1770\u1780-\u17B3\u17D7\u17DC\u17E0-\u17E9\u17F0-\u17F9\u1810-\u1819\u1820-\u1878\u1880-\u1884\u1887-\u18A8\u18AA\u18B0-\u18F5\u1900-\u191E\u1946-\u196D\u1970-\u1974\u1980-\u19AB\u19B0-\u19C9\u19D0-\u19DA\u1A00-\u1A16\u1A20-\u1A54\u1A80-\u1A89\u1A90-\u1A99\u1AA7\u1B05-\u1B33\u1B45-\u1B4C\u1B50-\u1B59\u1B83-\u1BA0\u1BAE-\u1BE5\u1C00-\u1C23\u1C40-\u1C49\u1C4D-\u1C7D\u1C80-\u1C88\u1C90-\u1CBA\u1CBD-\u1CBF\u1CE9-\u1CEC\u1CEE-\u1CF3\u1CF5\u1CF6\u1CFA\u1D00-\u1DBF\u1E00-\u1F15\u1F18-\u1F1D\u1F20-\u1F45\u1F48-\u1F4D\u1F50-\u1F57\u1F59\u1F5B\u1F5D\u1F5F-\u1F7D\u1F80-\u1FB4\u1FB6-\u1FBC\u1FBE\u1FC2-\u1FC4\u1FC6-\u1FCC\u1FD0-\u1FD3\u1FD6-\u1FDB\u1FE0-\u1FEC\u1FF2-\u1FF4\u1FF6-\u1FFC\u2070\u2071\u2074-\u2079\u207F-\u2089\u2090-\u209C\u2102\u2107\u210A-\u2113\u2115\u2119-\u211D\u2124\u2126\u2128\u212A-\u212D\u212F-\u2139\u213C-\u213F\u2145-\u2149\u214E\u2150-\u2189\u2460-\u249B\u24EA-\u24FF\u2776-\u2793\u2C00-\u2CE4\u2CEB-\u2CEE\u2CF2\u2CF3\u2CFD\u2D00-\u2D25\u2D27\u2D2D\u2D30-\u2D67\u2D6F\u2D80-\u2D96\u2DA0-\u2DA6\u2DA8-\u2DAE\u2DB0-\u2DB6\u2DB8-\u2DBE\u2DC0-\u2DC6\u2DC8-\u2DCE\u2DD0-\u2DD6\u2DD8-\u2DDE\u2E2F\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303C\u3041-\u3096\u309D-\u309F\u30A1-\u30FA\u30FC-\u30FF\u3105-\u312F\u3131-\u318E\u3192-\u3195\u31A0-\u31BF\u31F0-\u31FF\u3220-\u3229\u3248-\u324F\u3251-\u325F\u3280-\u3289\u32B1-\u32BF\u3400-\u4DBF\u4E00-\uA48C\uA4D0-\uA4FD\uA500-\uA60C\uA610-\uA62B\uA640-\uA66E\uA67F-\uA69D\uA6A0-\uA6EF\uA717-\uA71F\uA722-\uA788\uA78B-\uA7CA\uA7D0\uA7D1\uA7D3\uA7D5-\uA7D9\uA7F2-\uA801\uA803-\uA805\uA807-\uA80A\uA80C-\uA822\uA830-\uA835\uA840-\uA873\uA882-\uA8B3\uA8D0-\uA8D9\uA8F2-\uA8F7\uA8FB\uA8FD\uA8FE\uA900-\uA925\uA930-\uA946\uA960-\uA97C\uA984-\uA9B2\uA9CF-\uA9D9\uA9E0-\uA9E4\uA9E6-\uA9FE\uAA00-\uAA28\uAA40-\uAA42\uAA44-\uAA4B\uAA50-\uAA59\uAA60-\uAA76\uAA7A\uAA7E-\uAAAF\uAAB1\uAAB5\uAAB6\uAAB9-\uAABD\uAAC0\uAAC2\uAADB-\uAADD\uAAE0-\uAAEA\uAAF2-\uAAF4\uAB01-\uAB06\uAB09-\uAB0E\uAB11-\uAB16\uAB20-\uAB26\uAB28-\uAB2E\uAB30-\uAB5A\uAB5C-\uAB69\uAB70-\uABE2\uABF0-\uABF9\uAC00-\uD7A3\uD7B0-\uD7C6\uD7CB-\uD7FB\uF900-\uFA6D\uFA70-\uFAD9\uFB00-\uFB06\uFB13-\uFB17\uFB1D\uFB1F-\uFB28\uFB2A-\uFB36\uFB38-\uFB3C\uFB3E\uFB40\uFB41\uFB43\uFB44\uFB46-\uFBB1\uFBD3-\uFD3D\uFD50-\uFD8F\uFD92-\uFDC7\uFDF0-\uFDFB\uFE70-\uFE74\uFE76-\uFEFC\uFF10-\uFF19\uFF21-\uFF3A\uFF41-\uFF5A\uFF66-\uFFBE\uFFC2-\uFFC7\uFFCA-\uFFCF\uFFD2-\uFFD7\uFFDA-\uFFDC]|\uD800[\uDC00-\uDC0B\uDC0D-\uDC26\uDC28-\uDC3A\uDC3C\uDC3D\uDC3F-\uDC4D\uDC50-\uDC5D\uDC80-\uDCFA\uDD07-\uDD33\uDD40-\uDD78\uDD8A\uDD8B\uDE80-\uDE9C\uDEA0-\uDED0\uDEE1-\uDEFB\uDF00-\uDF23\uDF2D-\uDF4A\uDF50-\uDF75\uDF80-\uDF9D\uDFA0-\uDFC3\uDFC8-\uDFCF\uDFD1-\uDFD5]|\uD801[\uDC00-\uDC9D\uDCA0-\uDCA9\uDCB0-\uDCD3\uDCD8-\uDCFB\uDD00-\uDD27\uDD30-\uDD63\uDD70-\uDD7A\uDD7C-\uDD8A\uDD8C-\uDD92\uDD94\uDD95\uDD97-\uDDA1\uDDA3-\uDDB1\uDDB3-\uDDB9\uDDBB\uDDBC\uDE00-\uDF36\uDF40-\uDF55\uDF60-\uDF67\uDF80-\uDF85\uDF87-\uDFB0\uDFB2-\uDFBA]|\uD802[\uDC00-\uDC05\uDC08\uDC0A-\uDC35\uDC37\uDC38\uDC3C\uDC3F-\uDC55\uDC58-\uDC76\uDC79-\uDC9E\uDCA7-\uDCAF\uDCE0-\uDCF2\uDCF4\uDCF5\uDCFB-\uDD1B\uDD20-\uDD39\uDD80-\uDDB7\uDDBC-\uDDCF\uDDD2-\uDE00\uDE10-\uDE13\uDE15-\uDE17\uDE19-\uDE35\uDE40-\uDE48\uDE60-\uDE7E\uDE80-\uDE9F\uDEC0-\uDEC7\uDEC9-\uDEE4\uDEEB-\uDEEF\uDF00-\uDF35\uDF40-\uDF55\uDF58-\uDF72\uDF78-\uDF91\uDFA9-\uDFAF]|\uD803[\uDC00-\uDC48\uDC80-\uDCB2\uDCC0-\uDCF2\uDCFA-\uDD23\uDD30-\uDD39\uDE60-\uDE7E\uDE80-\uDEA9\uDEB0\uDEB1\uDF00-\uDF27\uDF30-\uDF45\uDF51-\uDF54\uDF70-\uDF81\uDFB0-\uDFCB\uDFE0-\uDFF6]|\uD804[\uDC03-\uDC37\uDC52-\uDC6F\uDC71\uDC72\uDC75\uDC83-\uDCAF\uDCD0-\uDCE8\uDCF0-\uDCF9\uDD03-\uDD26\uDD36-\uDD3F\uDD44\uDD47\uDD50-\uDD72\uDD76\uDD83-\uDDB2\uDDC1-\uDDC4\uDDD0-\uDDDA\uDDDC\uDDE1-\uDDF4\uDE00-\uDE11\uDE13-\uDE2B\uDE80-\uDE86\uDE88\uDE8A-\uDE8D\uDE8F-\uDE9D\uDE9F-\uDEA8\uDEB0-\uDEDE\uDEF0-\uDEF9\uDF05-\uDF0C\uDF0F\uDF10\uDF13-\uDF28\uDF2A-\uDF30\uDF32\uDF33\uDF35-\uDF39\uDF3D\uDF50\uDF5D-\uDF61]|\uD805[\uDC00-\uDC34\uDC47-\uDC4A\uDC50-\uDC59\uDC5F-\uDC61\uDC80-\uDCAF\uDCC4\uDCC5\uDCC7\uDCD0-\uDCD9\uDD80-\uDDAE\uDDD8-\uDDDB\uDE00-\uDE2F\uDE44\uDE50-\uDE59\uDE80-\uDEAA\uDEB8\uDEC0-\uDEC9\uDF00-\uDF1A\uDF30-\uDF3B\uDF40-\uDF46]|\uD806[\uDC00-\uDC2B\uDCA0-\uDCF2\uDCFF-\uDD06\uDD09\uDD0C-\uDD13\uDD15\uDD16\uDD18-\uDD2F\uDD3F\uDD41\uDD50-\uDD59\uDDA0-\uDDA7\uDDAA-\uDDD0\uDDE1\uDDE3\uDE00\uDE0B-\uDE32\uDE3A\uDE50\uDE5C-\uDE89\uDE9D\uDEB0-\uDEF8]|\uD807[\uDC00-\uDC08\uDC0A-\uDC2E\uDC40\uDC50-\uDC6C\uDC72-\uDC8F\uDD00-\uDD06\uDD08\uDD09\uDD0B-\uDD30\uDD46\uDD50-\uDD59\uDD60-\uDD65\uDD67\uDD68\uDD6A-\uDD89\uDD98\uDDA0-\uDDA9\uDEE0-\uDEF2\uDFB0\uDFC0-\uDFD4]|\uD808[\uDC00-\uDF99]|\uD809[\uDC00-\uDC6E\uDC80-\uDD43]|\uD80B[\uDF90-\uDFF0]|[\uD80C\uD81C-\uD820\uD822\uD840-\uD868\uD86A-\uD86C\uD86F-\uD872\uD874-\uD879\uD880-\uD883][\uDC00-\uDFFF]|\uD80D[\uDC00-\uDC2E]|\uD811[\uDC00-\uDE46]|\uD81A[\uDC00-\uDE38\uDE40-\uDE5E\uDE60-\uDE69\uDE70-\uDEBE\uDEC0-\uDEC9\uDED0-\uDEED\uDF00-\uDF2F\uDF40-\uDF43\uDF50-\uDF59\uDF5B-\uDF61\uDF63-\uDF77\uDF7D-\uDF8F]|\uD81B[\uDE40-\uDE96\uDF00-\uDF4A\uDF50\uDF93-\uDF9F\uDFE0\uDFE1\uDFE3]|\uD821[\uDC00-\uDFF7]|\uD823[\uDC00-\uDCD5\uDD00-\uDD08]|\uD82B[\uDFF0-\uDFF3\uDFF5-\uDFFB\uDFFD\uDFFE]|\uD82C[\uDC00-\uDD22\uDD50-\uDD52\uDD64-\uDD67\uDD70-\uDEFB]|\uD82F[\uDC00-\uDC6A\uDC70-\uDC7C\uDC80-\uDC88\uDC90-\uDC99]|\uD834[\uDEE0-\uDEF3\uDF60-\uDF78]|\uD835[\uDC00-\uDC54\uDC56-\uDC9C\uDC9E\uDC9F\uDCA2\uDCA5\uDCA6\uDCA9-\uDCAC\uDCAE-\uDCB9\uDCBB\uDCBD-\uDCC3\uDCC5-\uDD05\uDD07-\uDD0A\uDD0D-\uDD14\uDD16-\uDD1C\uDD1E-\uDD39\uDD3B-\uDD3E\uDD40-\uDD44\uDD46\uDD4A-\uDD50\uDD52-\uDEA5\uDEA8-\uDEC0\uDEC2-\uDEDA\uDEDC-\uDEFA\uDEFC-\uDF14\uDF16-\uDF34\uDF36-\uDF4E\uDF50-\uDF6E\uDF70-\uDF88\uDF8A-\uDFA8\uDFAA-\uDFC2\uDFC4-\uDFCB\uDFCE-\uDFFF]|\uD837[\uDF00-\uDF1E]|\uD838[\uDD00-\uDD2C\uDD37-\uDD3D\uDD40-\uDD49\uDD4E\uDE90-\uDEAD\uDEC0-\uDEEB\uDEF0-\uDEF9]|\uD839[\uDFE0-\uDFE6\uDFE8-\uDFEB\uDFED\uDFEE\uDFF0-\uDFFE]|\uD83A[\uDC00-\uDCC4\uDCC7-\uDCCF\uDD00-\uDD43\uDD4B\uDD50-\uDD59]|\uD83B[\uDC71-\uDCAB\uDCAD-\uDCAF\uDCB1-\uDCB4\uDD01-\uDD2D\uDD2F-\uDD3D\uDE00-\uDE03\uDE05-\uDE1F\uDE21\uDE22\uDE24\uDE27\uDE29-\uDE32\uDE34-\uDE37\uDE39\uDE3B\uDE42\uDE47\uDE49\uDE4B\uDE4D-\uDE4F\uDE51\uDE52\uDE54\uDE57\uDE59\uDE5B\uDE5D\uDE5F\uDE61\uDE62\uDE64\uDE67-\uDE6A\uDE6C-\uDE72\uDE74-\uDE77\uDE79-\uDE7C\uDE7E\uDE80-\uDE89\uDE8B-\uDE9B\uDEA1-\uDEA3\uDEA5-\uDEA9\uDEAB-\uDEBB]|\uD83C[\uDD00-\uDD0C]|\uD83E[\uDFF0-\uDFF9]|\uD869[\uDC00-\uDEDF\uDF00-\uDFFF]|\uD86D[\uDC00-\uDF38\uDF40-\uDFFF]|\uD86E[\uDC00-\uDC1D\uDC20-\uDFFF]|\uD873[\uDC00-\uDEA1\uDEB0-\uDFFF]|\uD87A[\uDC00-\uDFE0]|\uD87E[\uDC00-\uDE1D]|\uD884[\uDC00-\uDF4A])/))){var r=i[1]||i[2]||"";if(!r||r&&(""===n||this.rules.inline.punctuation.exec(n))){var o,a,l=i[0].length-1,s=l,u=0,c="*"===i[0][0]?this.rules.inline.emStrong.rDelimAst:this.rules.inline.emStrong.rDelimUnd;for(c.lastIndex=0,t=t.slice(-1*e.length+l);null!=(i=c.exec(t));)if(o=i[1]||i[2]||i[3]||i[4]||i[5]||i[6])if(a=o.length,i[3]||i[4])s+=a;else if(!((i[5]||i[6])&&l%3)||(l+a)%3){if(!((s-=a)>0)){if(a=Math.min(a,a+s+u),Math.min(l,a)%2){var d=e.slice(1,l+i.index+a);return{type:"em",raw:e.slice(0,l+i.index+a+1),text:d,tokens:this.lexer.inlineTokens(d)}}var h=e.slice(2,l+i.index+a-1);return{type:"strong",raw:e.slice(0,l+i.index+a+1),text:h,tokens:this.lexer.inlineTokens(h)}}}else u+=a}}},n.codespan=function(e){var t=this.rules.inline.code.exec(e);if(t){var n=t[2].replace(/\n/g," "),i=/[^ ]/.test(n),r=/^ /.test(n)&&/ $/.test(n);return i&&r&&(n=n.substring(1,n.length-1)),n=d(n,!0),{type:"codespan",raw:t[0],text:n}}},n.br=function(e){var t=this.rules.inline.br.exec(e);if(t)return{type:"br",raw:t[0]}},n.del=function(e){var t=this.rules.inline.del.exec(e);if(t)return{type:"del",raw:t[0],text:t[2],tokens:this.lexer.inlineTokens(t[2])}},n.autolink=function(e,t){var n,i,r=this.rules.inline.autolink.exec(e);if(r)return i="@"===r[2]?"mailto:"+(n=d(this.options.mangle?t(r[1]):r[1])):n=d(r[1]),{type:"link",raw:r[0],text:n,href:i,tokens:[{type:"text",raw:n,text:n}]}},n.url=function(e,t){var n;if(n=this.rules.inline.url.exec(e)){var i,r;if("@"===n[2])r="mailto:"+(i=d(this.options.mangle?t(n[0]):n[0]));else{var o;do{o=n[0],n[0]=this.rules.inline._backpedal.exec(n[0])[0]}while(o!==n[0]);i=d(n[0]),r="www."===n[1]?"http://"+i:i}return{type:"link",raw:n[0],text:i,href:r,tokens:[{type:"text",raw:i,text:i}]}}},n.inlineText=function(e,t){var n,i=this.rules.inline.text.exec(e);if(i)return n=this.lexer.state.inRawBlock?this.options.sanitize?this.options.sanitizer?this.options.sanitizer(i[0]):d(i[0]):i[0]:d(this.options.smartypants?t(i[0]):i[0]),{type:"text",raw:i[0],text:n}},t}(),M={newline:/^(?: *(?:\n|$))+/,code:/^( {4}[^\n]+(?:\n(?: *(?:\n|$))*)?)+/,fences:/^ {0,3}(`{3,}(?=[^`\n]*\n)|~{3,})([^\n]*)\n(?:|([\s\S]*?)\n)(?: {0,3}\1[~`]* *(?=\n|$)|$)/,hr:/^ {0,3}((?:-[\t ]*){3,}|(?:_[ \t]*){3,}|(?:\*[ \t]*){3,})(?:\n+|$)/,heading:/^ {0,3}(#{1,6})(?=\s|$)(.*)(?:\n+|$)/,blockquote:/^( {0,3}> ?(paragraph|[^\n]*)(?:\n|$))+/,list:/^( {0,3}bull)([ \t][^\n]+?)?(?:\n|$)/,html:"^ {0,3}(?:<(script|pre|style|textarea)[\\s>][\\s\\S]*?(?:[^\\n]*\\n+|$)|comment[^\\n]*(\\n+|$)|<\\?[\\s\\S]*?(?:\\?>\\n*|$)|\\n*|$)|\\n*|$)|)[\\s\\S]*?(?:(?:\\n *)+\\n|$)|<(?!script|pre|style|textarea)([a-z][\\w-]*)(?:attribute)*? */?>(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$)|(?=[ \\t]*(?:\\n|$))[\\s\\S]*?(?:(?:\\n *)+\\n|$))",def:/^ {0,3}\[(label)\]: *(?:\n *)?]+)>?(?:(?: +(?:\n *)?| *\n *)(title))? *(?:\n+|$)/,table:w,lheading:/^([^\n]+)\n {0,3}(=+|-+) *(?:\n+|$)/,_paragraph:/^([^\n]+(?:\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\n)[^\n]+)*)/,text:/^[^\n]+/,_label:/(?!\s*\])(?:\\.|[^\[\]\\])+/,_title:/(?:"(?:\\"?|[^"\\])*"|'[^'\n]*(?:\n[^'\n]+)*\n?'|\([^()]*\))/};M.def=m(M.def).replace("label",M._label).replace("title",M._title).getRegex(),M.bullet=/(?:[*+-]|\d{1,9}[.)])/,M.listItemStart=m(/^( *)(bull) */).replace("bull",M.bullet).getRegex(),M.list=m(M.list).replace(/bull/g,M.bullet).replace("hr","\\n+(?=\\1?(?:(?:- *){3,}|(?:_ *){3,}|(?:\\* *){3,})(?:\\n+|$))").replace("def","\\n+(?="+M.def.source+")").getRegex(),M._tag="address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|section|source|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul",M._comment=/|$)/,M.html=m(M.html,"i").replace("comment",M._comment).replace("tag",M._tag).replace("attribute",/ +[a-zA-Z:_][\w.:-]*(?: *= *"[^"\n]*"| *= *'[^'\n]*'| *= *[^\s"'=<>`]+)?/).getRegex(),M.paragraph=m(M._paragraph).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("|table","").replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",M._tag).getRegex(),M.blockquote=m(M.blockquote).replace("paragraph",M.paragraph).getRegex(),M.normal=k({},M),M.gfm=k({},M.normal,{table:"^ *([^\\n ].*\\|.*)\\n {0,3}(?:\\| *)?(:?-+:? *(?:\\| *:?-+:? *)*)(?:\\| *)?(?:\\n((?:(?! *\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\n|$))*)\\n*|$)"}),M.gfm.table=m(M.gfm.table).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("blockquote"," {0,3}>").replace("code"," {4}[^\\n]").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",M._tag).getRegex(),M.gfm.paragraph=m(M._paragraph).replace("hr",M.hr).replace("heading"," {0,3}#{1,6} ").replace("|lheading","").replace("table",M.gfm.table).replace("blockquote"," {0,3}>").replace("fences"," {0,3}(?:`{3,}(?=[^`\\n]*\\n)|~{3,})[^\\n]*\\n").replace("list"," {0,3}(?:[*+-]|1[.)]) ").replace("html",")|<(?:script|pre|style|textarea|!--)").replace("tag",M._tag).getRegex(),M.pedantic=k({},M.normal,{html:m("^ *(?:comment *(?:\\n|\\s*$)|<(tag)[\\s\\S]+? *(?:\\n{2,}|\\s*$)|\\s]*)*?/?> *(?:\\n{2,}|\\s*$))").replace("comment",M._comment).replace(/tag/g,"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\b)\\w+(?!:|[^\\w\\s@]*@)\\b").getRegex(),def:/^ *\[([^\]]+)\]: *]+)>?(?: +(["(][^\n]+[")]))? *(?:\n+|$)/,heading:/^(#{1,6})(.*)(?:\n+|$)/,fences:w,paragraph:m(M.normal._paragraph).replace("hr",M.hr).replace("heading"," *#{1,6} *[^\n]").replace("lheading",M.lheading).replace("blockquote"," {0,3}>").replace("|fences","").replace("|list","").replace("|html","").getRegex()});var B={escape:/^\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/,autolink:/^<(scheme:[^\s\x00-\x1f<>]*|email)>/,url:w,tag:"^comment|^|^<[a-zA-Z][\\w-]*(?:attribute)*?\\s*/?>|^<\\?[\\s\\S]*?\\?>|^|^",link:/^!?\[(label)\]\(\s*(href)(?:\s+(title))?\s*\)/,reflink:/^!?\[(label)\]\[(ref)\]/,nolink:/^!?\[(ref)\](?:\[\])?/,reflinkSearch:"reflink|nolink(?!\\()",emStrong:{lDelim:/^(?:\*+(?:([punct_])|[^\s*]))|^_+(?:([punct*])|([^\s_]))/,rDelimAst:/^[^_*]*?\_\_[^_*]*?\*[^_*]*?(?=\_\_)|[^*]+(?=[^*])|[punct_](\*+)(?=[\s]|$)|[^punct*_\s](\*+)(?=[punct_\s]|$)|[punct_\s](\*+)(?=[^punct*_\s])|[\s](\*+)(?=[punct_])|[punct_](\*+)(?=[punct_])|[^punct*_\s](\*+)(?=[^punct*_\s])/,rDelimUnd:/^[^_*]*?\*\*[^_*]*?\_[^_*]*?(?=\*\*)|[^_]+(?=[^_])|[punct*](\_+)(?=[\s]|$)|[^punct*_\s](\_+)(?=[punct*\s]|$)|[punct*\s](\_+)(?=[^punct*_\s])|[\s](\_+)(?=[punct*])|[punct*](\_+)(?=[punct*])/},code:/^(`+)([^`]|[^`][\s\S]*?[^`])\1(?!`)/,br:/^( {2,}|\\)\n(?!\s*$)/,del:w,text:/^(`+|[^`])(?:(?= {2,}\n)|[\s\S]*?(?:(?=[\\.5&&(n="x"+n.toString(16)),i+="&#"+n+";";return i}B._punctuation="!\"#$%&'()+\\-.,/:;<=>?@\\[\\]`^{|}~",B.punctuation=m(B.punctuation).replace(/punctuation/g,B._punctuation).getRegex(),B.blockSkip=/\[[^\]]*?\]\([^\)]*?\)|`[^`]*?`|<[^>]*?>/g,B.escapedEmSt=/\\\*|\\_/g,B._comment=m(M._comment).replace("(?:--\x3e|$)","--\x3e").getRegex(),B.emStrong.lDelim=m(B.emStrong.lDelim).replace(/punct/g,B._punctuation).getRegex(),B.emStrong.rDelimAst=m(B.emStrong.rDelimAst,"g").replace(/punct/g,B._punctuation).getRegex(),B.emStrong.rDelimUnd=m(B.emStrong.rDelimUnd,"g").replace(/punct/g,B._punctuation).getRegex(),B._escapes=/\\([!"#$%&'()*+,\-./:;<=>?@\[\]\\^_`{|}~])/g,B._scheme=/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/,B._email=/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/,B.autolink=m(B.autolink).replace("scheme",B._scheme).replace("email",B._email).getRegex(),B._attribute=/\s+[a-zA-Z:_][\w.:-]*(?:\s*=\s*"[^"]*"|\s*=\s*'[^']*'|\s*=\s*[^\s"'=<>`]+)?/,B.tag=m(B.tag).replace("comment",B._comment).replace("attribute",B._attribute).getRegex(),B._label=/(?:\[(?:\\.|[^\[\]\\])*\]|\\.|`[^`]*`|[^\[\]\\`])*?/,B._href=/<(?:\\.|[^\n<>\\])+>|[^\s\x00-\x1f]*/,B._title=/"(?:\\"?|[^"\\])*"|'(?:\\'?|[^'\\])*'|\((?:\\\)?|[^)\\])*\)/,B.link=m(B.link).replace("label",B._label).replace("href",B._href).replace("title",B._title).getRegex(),B.reflink=m(B.reflink).replace("label",B._label).replace("ref",M._label).getRegex(),B.nolink=m(B.nolink).replace("ref",M._label).getRegex(),B.reflinkSearch=m(B.reflinkSearch,"g").replace("reflink",B.reflink).replace("nolink",B.nolink).getRegex(),B.normal=k({},B),B.pedantic=k({},B.normal,{strong:{start:/^__|\*\*/,middle:/^__(?=\S)([\s\S]*?\S)__(?!_)|^\*\*(?=\S)([\s\S]*?\S)\*\*(?!\*)/,endAst:/\*\*(?!\*)/g,endUnd:/__(?!_)/g},em:{start:/^_|\*/,middle:/^()\*(?=\S)([\s\S]*?\S)\*(?!\*)|^_(?=\S)([\s\S]*?\S)_(?!_)/,endAst:/\*(?!\*)/g,endUnd:/_(?!_)/g},link:m(/^!?\[(label)\]\((.*?)\)/).replace("label",B._label).getRegex(),reflink:m(/^!?\[(label)\]\s*\[([^\]]*)\]/).replace("label",B._label).getRegex()}),B.gfm=k({},B.normal,{escape:m(B.escape).replace("])","~|])").getRegex(),_extended_email:/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/,url:/^((?:ftp|https?):\/\/|www\.)(?:[a-zA-Z0-9\-]+\.?)+[^\s<]*|^email/,_backpedal:/(?:[^?!.,:;*_~()&]+|\([^)]*\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_~)]+(?!$))+/,del:/^(~~?)(?=[^\s~])([\s\S]*?[^\s~])\1(?=[^~]|$)/,text:/^([`~]+|[^`~])(?:(?= {2,}\n)|(?=[a-zA-Z0-9.!#$%&'*+\/=?_`{\|}~-]+@)|[\s\S]*?(?:(?=[\\0?t[t.length-1].raw+="\n":t.push(n);else if(n=this.tokenizer.code(e))e=e.substring(n.raw.length),!(i=t[t.length-1])||"paragraph"!==i.type&&"text"!==i.type?t.push(n):(i.raw+="\n"+n.raw,i.text+="\n"+n.text,this.inlineQueue[this.inlineQueue.length-1].src=i.text);else if(n=this.tokenizer.fences(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.heading(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.hr(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.blockquote(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.list(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.html(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.def(e))e=e.substring(n.raw.length),!(i=t[t.length-1])||"paragraph"!==i.type&&"text"!==i.type?this.tokens.links[n.tag]||(this.tokens.links[n.tag]={href:n.href,title:n.title}):(i.raw+="\n"+n.raw,i.text+="\n"+n.raw,this.inlineQueue[this.inlineQueue.length-1].src=i.text);else if(n=this.tokenizer.table(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.lheading(e))e=e.substring(n.raw.length),t.push(n);else if(r=e,this.options.extensions&&this.options.extensions.startBlock&&function(){var t=1/0,n=e.slice(1),i=void 0;a.options.extensions.startBlock.forEach((function(e){"number"==typeof(i=e.call({lexer:this},n))&&i>=0&&(t=Math.min(t,i))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}(),this.state.top&&(n=this.tokenizer.paragraph(r)))i=t[t.length-1],o&&"paragraph"===i.type?(i.raw+="\n"+n.raw,i.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):t.push(n),o=r.length!==e.length,e=e.substring(n.raw.length);else if(n=this.tokenizer.text(e))e=e.substring(n.raw.length),(i=t[t.length-1])&&"text"===i.type?(i.raw+="\n"+n.raw,i.text+="\n"+n.text,this.inlineQueue.pop(),this.inlineQueue[this.inlineQueue.length-1].src=i.text):t.push(n);else if(e){var l="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(l);break}throw new Error(l)}return this.state.top=!0,t},a.inline=function(e,t){return void 0===t&&(t=[]),this.inlineQueue.push({src:e,tokens:t}),t},a.inlineTokens=function(e,t){var n,i,r,o=this;void 0===t&&(t=[]);var a,l,s,u=e;if(this.tokens.links){var c=Object.keys(this.tokens.links);if(c.length>0)for(;null!=(a=this.tokenizer.rules.inline.reflinkSearch.exec(u));)c.includes(a[0].slice(a[0].lastIndexOf("[")+1,-1))&&(u=u.slice(0,a.index)+"["+E("a",a[0].length-2)+"]"+u.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;null!=(a=this.tokenizer.rules.inline.blockSkip.exec(u));)u=u.slice(0,a.index)+"["+E("a",a[0].length-2)+"]"+u.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);for(;null!=(a=this.tokenizer.rules.inline.escapedEmSt.exec(u));)u=u.slice(0,a.index)+"++"+u.slice(this.tokenizer.rules.inline.escapedEmSt.lastIndex);for(;e;)if(l||(s=""),l=!1,!(this.options.extensions&&this.options.extensions.inline&&this.options.extensions.inline.some((function(i){return!!(n=i.call({lexer:o},e,t))&&(e=e.substring(n.raw.length),t.push(n),!0)}))))if(n=this.tokenizer.escape(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.tag(e))e=e.substring(n.raw.length),(i=t[t.length-1])&&"text"===n.type&&"text"===i.type?(i.raw+=n.raw,i.text+=n.text):t.push(n);else if(n=this.tokenizer.link(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.reflink(e,this.tokens.links))e=e.substring(n.raw.length),(i=t[t.length-1])&&"text"===n.type&&"text"===i.type?(i.raw+=n.raw,i.text+=n.text):t.push(n);else if(n=this.tokenizer.emStrong(e,u,s))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.codespan(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.br(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.del(e))e=e.substring(n.raw.length),t.push(n);else if(n=this.tokenizer.autolink(e,O))e=e.substring(n.raw.length),t.push(n);else if(this.state.inLink||!(n=this.tokenizer.url(e,O))){if(r=e,this.options.extensions&&this.options.extensions.startInline&&function(){var t=1/0,n=e.slice(1),i=void 0;o.options.extensions.startInline.forEach((function(e){"number"==typeof(i=e.call({lexer:this},n))&&i>=0&&(t=Math.min(t,i))})),t<1/0&&t>=0&&(r=e.substring(0,t+1))}(),n=this.tokenizer.inlineText(r,N))e=e.substring(n.raw.length),"_"!==n.raw.slice(-1)&&(s=n.raw.slice(-1)),l=!0,(i=t[t.length-1])&&"text"===i.type?(i.raw+=n.raw,i.text+=n.text):t.push(n);else if(e){var d="Infinite loop on byte: "+e.charCodeAt(0);if(this.options.silent){console.error(d);break}throw new Error(d)}}else e=e.substring(n.raw.length),t.push(n);return t},i=n,o=[{key:"rules",get:function(){return{block:M,inline:B}}}],(r=null)&&t(i.prototype,r),o&&t(i,o),Object.defineProperty(i,"prototype",{writable:!1}),n}(),z=function(){function t(t){this.options=t||e.defaults}var n=t.prototype;return n.code=function(e,t,n){var i=(t||"").match(/\S*/)[0];if(this.options.highlight){var r=this.options.highlight(e,i);null!=r&&r!==e&&(n=!0,e=r)}return e=e.replace(/\n$/,"")+"\n",i?'
'+(n?e:d(e,!0))+"
\n":"
"+(n?e:d(e,!0))+"
\n"},n.blockquote=function(e){return"
\n"+e+"
\n"},n.html=function(e){return e},n.heading=function(e,t,n,i){return this.options.headerIds?"'+e+"\n":""+e+"\n"},n.hr=function(){return this.options.xhtml?"
\n":"
\n"},n.list=function(e,t,n){var i=t?"ol":"ul";return"<"+i+(t&&1!==n?' start="'+n+'"':"")+">\n"+e+"\n"},n.listitem=function(e){return"
  • "+e+"
  • \n"},n.checkbox=function(e){return" "},n.paragraph=function(e){return"

    "+e+"

    \n"},n.table=function(e,t){return t&&(t=""+t+""),"\n\n"+e+"\n"+t+"
    \n"},n.tablerow=function(e){return"\n"+e+"\n"},n.tablecell=function(e,t){var n=t.header?"th":"td";return(t.align?"<"+n+' align="'+t.align+'">':"<"+n+">")+e+"\n"},n.strong=function(e){return""+e+""},n.em=function(e){return""+e+""},n.codespan=function(e){return""+e+""},n.br=function(){return this.options.xhtml?"
    ":"
    "},n.del=function(e){return""+e+""},n.link=function(e,t,n){if(null===(e=x(this.options.sanitize,this.options.baseUrl,e)))return n;var i='
    "},n.image=function(e,t,n){if(null===(e=x(this.options.sanitize,this.options.baseUrl,e)))return n;var i=''+n+'":">"},n.text=function(e){return e},t}(),H=function(){function e(){}var t=e.prototype;return t.strong=function(e){return e},t.em=function(e){return e},t.codespan=function(e){return e},t.del=function(e){return e},t.html=function(e){return e},t.text=function(e){return e},t.link=function(e,t,n){return""+n},t.image=function(e,t,n){return""+n},t.br=function(){return""},e}(),R=function(){function e(){this.seen={}}var t=e.prototype;return t.serialize=function(e){return e.toLowerCase().trim().replace(/<[!\/a-z].*?>/gi,"").replace(/[\u2000-\u206F\u2E00-\u2E7F\\'!"#$%&()*+,./:;<=>?@[\]^`{|}~]/g,"").replace(/\s/g,"-")},t.getNextSafeSlug=function(e,t){var n=e,i=0;if(this.seen.hasOwnProperty(n)){i=this.seen[e];do{n=e+"-"+ ++i}while(this.seen.hasOwnProperty(n))}return t||(this.seen[e]=i,this.seen[n]=0),n},t.slug=function(e,t){void 0===t&&(t={});var n=this.serialize(e);return this.getNextSafeSlug(n,t.dryrun)},e}(),P=function(){function t(t){this.options=t||e.defaults,this.options.renderer=this.options.renderer||new z,this.renderer=this.options.renderer,this.renderer.options=this.options,this.textRenderer=new H,this.slugger=new R}t.parse=function(e,n){return new t(n).parse(e)},t.parseInline=function(e,n){return new t(n).parseInline(e)};var n=t.prototype;return n.parse=function(e,t){void 0===t&&(t=!0);var n,i,r,o,a,l,s,u,c,d,h,p,m,g,v,x,y,b,D,C="",w=e.length;for(n=0;n0&&"paragraph"===v.tokens[0].type?(v.tokens[0].text=b+" "+v.tokens[0].text,v.tokens[0].tokens&&v.tokens[0].tokens.length>0&&"text"===v.tokens[0].tokens[0].type&&(v.tokens[0].tokens[0].text=b+" "+v.tokens[0].tokens[0].text)):v.tokens.unshift({type:"text",text:b}):g+=b),g+=this.parse(v.tokens,m),c+=this.renderer.listitem(g,y,x);C+=this.renderer.list(c,h,p);continue;case"html":C+=this.renderer.html(d.text);continue;case"paragraph":C+=this.renderer.paragraph(this.parseInline(d.tokens));continue;case"text":for(c=d.tokens?this.parseInline(d.tokens):d.text;n+1An error occurred:

    "+d(e.message+"",!0)+"
    ";throw e}try{var s=I.lex(e,t);if(t.walkTokens){if(t.async)return Promise.all(_.walkTokens(s,t.walkTokens)).then((function(){return P.parse(s,t)})).catch(l);_.walkTokens(s,t.walkTokens)}return P.parse(s,t)}catch(e){l(e)}}_.options=_.setOptions=function(t){var n;return k(_.defaults,t),n=_.defaults,e.defaults=n,_},_.getDefaults=r,_.defaults=e.defaults,_.use=function(){for(var e=arguments.length,t=new Array(e),n=0;nAn error occurred:

    "+d(e.message+"",!0)+"
    ";throw e}},_.Parser=P,_.parser=P.parse,_.Renderer=z,_.TextRenderer=H,_.Lexer=I,_.lexer=I.lex,_.Tokenizer=T,_.Slugger=R,_.parse=_;var W=_.options,j=_.setOptions,q=_.use,U=_.walkTokens,$=_.parseInline,G=_,V=P.parse,X=I.lex;e.Lexer=I,e.Parser=P,e.Renderer=z,e.Slugger=R,e.TextRenderer=H,e.Tokenizer=T,e.getDefaults=r,e.lexer=X,e.marked=_,e.options=W,e.parse=G,e.parseInline=$,e.parser=V,e.setOptions=j,e.use=q,e.walkTokens=U,Object.defineProperty(e,"__esModule",{value:!0})}))},{}],16:[function(e,t,n){(function(n){(function(){var i;!function(){"use strict";(i=function(e,t,i,r){r=r||{},this.dictionary=null,this.rules={},this.dictionaryTable={},this.compoundRules=[],this.compoundRuleCodes={},this.replacementTable=[],this.flags=r.flags||{},this.memoized={},this.loaded=!1;var o,a,l,s,u,c=this;function d(e,t){var n=c._readFile(e,null,r.asyncLoad);r.asyncLoad?n.then((function(e){t(e)})):t(n)}function h(e){t=e,i&&p()}function f(e){i=e,t&&p()}function p(){for(c.rules=c._parseAFF(t),c.compoundRuleCodes={},a=0,s=c.compoundRules.length;a0&&(b.continuationClasses=x),"."!==y&&(b.match="SFX"===d?new RegExp(y+"$"):new RegExp("^"+y)),"0"!=m&&(b.remove="SFX"===d?new RegExp(m+"$"):m),p.push(b)}s[h]={type:d,combineable:"Y"==f,entries:p},r+=n}else if("COMPOUNDRULE"===d){for(o=r+1,l=r+1+(n=parseInt(c[1],10));o0&&(null===n[e]&&(n[e]=[]),n[e].push(t))}for(var r=1,o=t.length;r1){var u=this.parseRuleCodes(l[1]);"NEEDAFFIX"in this.flags&&-1!=u.indexOf(this.flags.NEEDAFFIX)||i(s,u);for(var c=0,d=u.length;c=this.flags.COMPOUNDMIN)for(t=0,n=this.compoundRules.length;t1&&c[1][1]!==c[1][0]&&(o=c[0]+c[1][1]+c[1][0]+c[1].substring(2),t&&!l.check(o)||(o in a?a[o]+=1:a[o]=1)),c[1]){var d=c[1].substring(0,1).toUpperCase()===c[1].substring(0,1)?"uppercase":"lowercase";for(i=0;ii?1:t[0].localeCompare(e[0])})).reverse();var u=[],c="lowercase";e.toUpperCase()===e?c="uppercase":e.substr(0,1).toUpperCase()+e.substr(1).toLowerCase()===e&&(c="capitalized");var d=t;for(n=0;n)+?/g),s={toggleBold:x,toggleItalic:y,drawLink:O,toggleHeadingSmaller:w,toggleHeadingBigger:k,drawImage:I,toggleBlockquote:C,toggleOrderedList:B,toggleUnorderedList:M,toggleCodeBlock:D,togglePreview:U,toggleStrikethrough:b,toggleHeading1:S,toggleHeading2:F,toggleHeading3:A,toggleHeading4:E,toggleHeading5:L,toggleHeading6:T,cleanBlock:N,drawTable:P,drawHorizontalRule:_,undo:W,redo:j,toggleSideBySide:q,toggleFullScreen:v},u={toggleBold:"Cmd-B",toggleItalic:"Cmd-I",drawLink:"Cmd-K",toggleHeadingSmaller:"Cmd-H",toggleHeadingBigger:"Shift-Cmd-H",toggleHeading1:"Ctrl+Alt+1",toggleHeading2:"Ctrl+Alt+2",toggleHeading3:"Ctrl+Alt+3",toggleHeading4:"Ctrl+Alt+4",toggleHeading5:"Ctrl+Alt+5",toggleHeading6:"Ctrl+Alt+6",cleanBlock:"Cmd-E",drawImage:"Cmd-Alt-I",toggleBlockquote:"Cmd-'",toggleOrderedList:"Cmd-Alt-L",toggleUnorderedList:"Cmd-L",toggleCodeBlock:"Cmd-Alt-C",togglePreview:"Cmd-P",toggleSideBySide:"F9",toggleFullScreen:"F11"},c=function(){var e,t=!1;return e=navigator.userAgent||navigator.vendor||window.opera,(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i.test(e)||/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw-(n|u)|c55\/|capi|ccwa|cdm-|cell|chtm|cldc|cmd-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc-s|devi|dica|dmob|do(c|p)o|ds(12|-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(-|_)|g1 u|g560|gene|gf-5|g-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd-(m|p|t)|hei-|hi(pt|ta)|hp( i|ip)|hs-c|ht(c(-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i-(20|go|ma)|i230|iac( |-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|-[a-w])|libw|lynx|m1-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|-([1-8]|c))|phil|pire|pl(ay|uc)|pn-2|po(ck|rt|se)|prox|psio|pt-g|qa-a|qc(07|12|21|32|60|-[2-7]|i-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h-|oo|p-)|sdk\/|se(c(-|0|1)|47|mc|nd|ri)|sgh-|shar|sie(-|m)|sk-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h-|v-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl-|tdg-|tel(i|m)|tim-|t-mo|to(pl|sh)|ts(70|m-|m3|m5)|tx-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas-|your|zeto|zte-/i.test(e.substr(0,4)))&&(t=!0),t};function d(e){return e=a?e.replace("Ctrl","Cmd"):e.replace("Cmd","Ctrl")}function h(e,t,n,i){var r=f(e,!1,t,n,"button",i);r.classList.add("easymde-dropdown"),r.onclick=function(){r.focus()};var o=document.createElement("div");o.className="easymde-dropdown-content";for(var a=0;a0){for(var g=document.createElement("i"),v=0;v=0&&!n(h=s.getLineHandle(o));o--);var g,v,x,y,b=i(s.getTokenAt({line:o,ch:1})).fencedChars;n(s.getLineHandle(u.line))?(g="",v=u.line):n(s.getLineHandle(u.line-1))?(g="",v=u.line-1):(g=b+"\n",v=u.line),n(s.getLineHandle(c.line))?(x="",y=c.line,0===c.ch&&(y+=1)):0!==c.ch&&n(s.getLineHandle(c.line+1))?(x="",y=c.line+1):(x=b+"\n",y=c.line+1),0===c.ch&&(y-=1),s.operation((function(){s.replaceRange(x,{line:y,ch:0},{line:y+(x?0:1),ch:0}),s.replaceRange(g,{line:v,ch:0},{line:v+(g?0:1),ch:0})})),s.setSelection({line:v+(g?1:0),ch:0},{line:y+(g?1:-1),ch:0}),s.focus()}else{var D=u.line;if(n(s.getLineHandle(u.line))&&("fenced"===r(s,u.line+1)?(o=u.line,D=u.line+1):(a=u.line,D=u.line-1)),void 0===o)for(o=D;o>=0&&!n(h=s.getLineHandle(o));o--);if(void 0===a)for(l=s.lineCount(),a=D;a=0;o--)if(!(h=s.getLineHandle(o)).text.match(/^\s*$/)&&"indented"!==r(s,o,h)){o+=1;break}for(l=s.lineCount(),a=u.line;a ]+|[0-9]+(.|\)))[ ]*/,""),e.replaceRange(t,{line:r,ch:0},{line:r,ch:99999999999999})}(e.codemirror)}function O(e){var t=e.options,n="https://";if(t.promptURLs){var i=prompt(t.promptTexts.link,n);if(!i)return!1;n=z(i)}X(e,"link",t.insertTexts.link,n)}function I(e){var t=e.options,n="https://";if(t.promptURLs){var i=prompt(t.promptTexts.image,n);if(!i)return!1;n=z(i)}X(e,"image",t.insertTexts.image,n)}function z(e){return encodeURI(e).replace(/([\\()])/g,"\\$1")}function H(e){e.openBrowseFileWindow()}function R(e,t){var n=e.codemirror,i=m(n),r=e.options,o=t.substr(t.lastIndexOf("/")+1),a=o.substring(o.lastIndexOf(".")+1).replace(/\?.*$/,"").toLowerCase();if(["png","jpg","jpeg","gif","svg","apng","avif","webp"].includes(a))$(n,i.image,r.insertTexts.uploadedImage,t);else{var l=r.insertTexts.link;l[0]="["+o,$(n,i.link,l,t)}e.updateStatusBar("upload-image",e.options.imageTexts.sbOnUploaded.replace("#image_name#",o)),setTimeout((function(){e.updateStatusBar("upload-image",e.options.imageTexts.sbInit)}),1e3)}function P(e){var t=e.codemirror,n=m(t),i=e.options;$(t,n.table,i.insertTexts.table)}function _(e){var t=e.codemirror,n=m(t),i=e.options;$(t,n.image,i.insertTexts.horizontalRule)}function W(e){var t=e.codemirror;t.undo(),t.focus()}function j(e){var t=e.codemirror;t.redo(),t.focus()}function q(e){var t=e.codemirror,n=t.getWrapperElement(),i=n.nextSibling,r=e.toolbarElements&&e.toolbarElements["side-by-side"],o=!1,a=n.parentNode;i.classList.contains("editor-preview-active-side")?(!1===e.options.sideBySideFullscreen&&a.classList.remove("sided--no-fullscreen"),i.classList.remove("editor-preview-active-side"),r&&r.classList.remove("active"),n.classList.remove("CodeMirror-sided")):(setTimeout((function(){t.getOption("fullScreen")||(!1===e.options.sideBySideFullscreen?a.classList.add("sided--no-fullscreen"):v(e)),i.classList.add("editor-preview-active-side")}),1),r&&r.classList.add("active"),n.classList.add("CodeMirror-sided"),o=!0);var l=n.lastChild;if(l.classList.contains("editor-preview-active")){l.classList.remove("editor-preview-active");var s=e.toolbarElements.preview,u=e.toolbar_div;s.classList.remove("active"),u.classList.remove("disabled-for-preview")}if(t.sideBySideRenderingFunction||(t.sideBySideRenderingFunction=function(){var t=e.options.previewRender(e.value(),i);null!=t&&(i.innerHTML=t)}),o){var c=e.options.previewRender(e.value(),i);null!=c&&(i.innerHTML=c),t.on("update",t.sideBySideRenderingFunction)}else t.off("update",t.sideBySideRenderingFunction);t.refresh()}function U(e){var t=e.codemirror,n=t.getWrapperElement(),i=e.toolbar_div,r=!!e.options.toolbar&&e.toolbarElements.preview,o=n.lastChild;if(t.getWrapperElement().nextSibling.classList.contains("editor-preview-active-side")&&q(e),!o||!o.classList.contains("editor-preview-full")){if((o=document.createElement("div")).className="editor-preview-full",e.options.previewClass)if(Array.isArray(e.options.previewClass))for(var a=0;a\s+/,"unordered-list":i,"ordered-list":i},u=function(e,t,o){var a=i.exec(t),l=function(e,t){return{quote:">","unordered-list":n,"ordered-list":"%%i."}[e].replace("%%i",t)}(e,c);return null!==a?(function(e,t){var i=new RegExp({quote:">","unordered-list":"\\"+n,"ordered-list":"\\d+."}[e]);return t&&i.test(t)}(e,a[2])&&(l=""),t=a[1]+l+a[3]+t.replace(r,"").replace(s[e],"$1")):0==o&&(t=l+" "+t),t},c=1,d=a.line;d<=l.line;d++)!function(n){var i=e.getLine(n);o[t]?i=i.replace(s[t],"$1"):("unordered-list"==t&&(i=u("ordered-list",i,!0)),i=u(t,i,!1),c+=1),e.replaceRange(i,{line:n,ch:0},{line:n,ch:99999999999999})}(d);e.focus()}}function X(e,t,n,i){if(e.codemirror&&!e.isPreviewActive()){var r=e.codemirror,o=m(r)[t];if(o){var a=r.getCursor("start"),l=r.getCursor("end"),s=r.getLine(a.line),u=s.slice(0,a.ch),c=s.slice(a.ch);"link"==t?u=u.replace(/(.*)[^!]\[/,"$1"):"image"==t&&(u=u.replace(/(.*)!\[$/,"$1")),c=c.replace(/]\(.*?\)/,""),r.replaceRange(u+c,{line:a.line,ch:0},{line:a.line,ch:99999999999999}),a.ch-=n[0].length,a!==l&&(l.ch-=n[0].length),r.setSelection(a,l),r.focus()}else $(r,o,n,i)}}function K(e,t,n,i){if(e.codemirror&&!e.isPreviewActive()){i=void 0===i?n:i;var r,o=e.codemirror,a=m(o),l=n,s=i,u=o.getCursor("start"),c=o.getCursor("end");a[t]?(l=(r=o.getLine(u.line)).slice(0,u.ch),s=r.slice(u.ch),"bold"==t?(l=l.replace(/(\*\*|__)(?![\s\S]*(\*\*|__))/,""),s=s.replace(/(\*\*|__)/,"")):"italic"==t?(l=l.replace(/(\*|_)(?![\s\S]*(\*|_))/,""),s=s.replace(/(\*|_)/,"")):"strikethrough"==t&&(l=l.replace(/(\*\*|~~)(?![\s\S]*(\*\*|~~))/,""),s=s.replace(/(\*\*|~~)/,"")),o.replaceRange(l+s,{line:u.line,ch:0},{line:u.line,ch:99999999999999}),"bold"==t||"strikethrough"==t?(u.ch-=2,u!==c&&(c.ch-=2)):"italic"==t&&(u.ch-=1,u!==c&&(c.ch-=1))):(r=o.getSelection(),"bold"==t?r=(r=r.split("**").join("")).split("__").join(""):"italic"==t?r=(r=r.split("*").join("")).split("_").join(""):"strikethrough"==t&&(r=r.split("~~").join("")),o.replaceSelection(l+r+s),u.ch+=n.length,c.ch=u.ch+r.length),o.setSelection(u,c),o.focus()}}function Z(e,t){if(Math.abs(e)<1024)return""+e+t[0];var n=0;do{e/=1024,++n}while(Math.abs(e)>=1024&&n=19968?n+=t[i].length:n+=1;return n}var ee={bold:"fa fa-bold",italic:"fa fa-italic",strikethrough:"fa fa-strikethrough",heading:"fa fa-header fa-heading","heading-smaller":"fa fa-header fa-heading header-smaller","heading-bigger":"fa fa-header fa-heading header-bigger","heading-1":"fa fa-header fa-heading header-1","heading-2":"fa fa-header fa-heading header-2","heading-3":"fa fa-header fa-heading header-3",code:"fa fa-code",quote:"fa fa-quote-left","ordered-list":"fa fa-list-ol","unordered-list":"fa fa-list-ul","clean-block":"fa fa-eraser",link:"fa fa-link",image:"fa fa-image","upload-image":"fa fa-image",table:"fa fa-table","horizontal-rule":"fa fa-minus",preview:"fa fa-eye","side-by-side":"fa fa-columns",fullscreen:"fa fa-arrows-alt",guide:"fa fa-question-circle",undo:"fa fa-undo",redo:"fa fa-repeat fa-redo"},te={bold:{name:"bold",action:x,className:ee.bold,title:"Bold",default:!0},italic:{name:"italic",action:y,className:ee.italic,title:"Italic",default:!0},strikethrough:{name:"strikethrough",action:b,className:ee.strikethrough,title:"Strikethrough"},heading:{name:"heading",action:w,className:ee.heading,title:"Heading",default:!0},"heading-smaller":{name:"heading-smaller",action:w,className:ee["heading-smaller"],title:"Smaller Heading"},"heading-bigger":{name:"heading-bigger",action:k,className:ee["heading-bigger"],title:"Bigger Heading"},"heading-1":{name:"heading-1",action:S,className:ee["heading-1"],title:"Big Heading"},"heading-2":{name:"heading-2",action:F,className:ee["heading-2"],title:"Medium Heading"},"heading-3":{name:"heading-3",action:A,className:ee["heading-3"],title:"Small Heading"},"separator-1":{name:"separator-1"},code:{name:"code",action:D,className:ee.code,title:"Code"},quote:{name:"quote",action:C,className:ee.quote,title:"Quote",default:!0},"unordered-list":{name:"unordered-list",action:M,className:ee["unordered-list"],title:"Generic List",default:!0},"ordered-list":{name:"ordered-list",action:B,className:ee["ordered-list"],title:"Numbered List",default:!0},"clean-block":{name:"clean-block",action:N,className:ee["clean-block"],title:"Clean block"},"separator-2":{name:"separator-2"},link:{name:"link",action:O,className:ee.link,title:"Create Link",default:!0},image:{name:"image",action:I,className:ee.image,title:"Insert Image",default:!0},"upload-image":{name:"upload-image",action:H,className:ee["upload-image"],title:"Import an image"},table:{name:"table",action:P,className:ee.table,title:"Insert Table"},"horizontal-rule":{name:"horizontal-rule",action:_,className:ee["horizontal-rule"],title:"Insert Horizontal Line"},"separator-3":{name:"separator-3"},preview:{name:"preview",action:U,className:ee.preview,noDisable:!0,title:"Toggle Preview",default:!0},"side-by-side":{name:"side-by-side",action:q,className:ee["side-by-side"],noDisable:!0,noMobile:!0,title:"Toggle Side by Side",default:!0},fullscreen:{name:"fullscreen",action:v,className:ee.fullscreen,noDisable:!0,noMobile:!0,title:"Toggle Fullscreen",default:!0},"separator-4":{name:"separator-4"},guide:{name:"guide",action:"https://www.markdownguide.org/basic-syntax/",className:ee.guide,noDisable:!0,title:"Markdown Guide",default:!0},"separator-5":{name:"separator-5"},undo:{name:"undo",action:W,className:ee.undo,noDisable:!0,title:"Undo"},redo:{name:"redo",action:j,className:ee.redo,noDisable:!0,title:"Redo"}},ne={link:["[","](#url#)"],image:["![","](#url#)"],uploadedImage:["![](#url#)",""],table:["","\n\n| Column 1 | Column 2 | Column 3 |\n| -------- | -------- | -------- |\n| Text | Text | Text |\n\n"],horizontalRule:["","\n\n-----\n\n"]},ie={link:"URL for the link:",image:"URL of the image:"},re={locale:"en-US",format:{hour:"2-digit",minute:"2-digit"}},oe={bold:"**",code:"```",italic:"*"},ae={sbInit:"Attach files by drag and dropping or pasting from clipboard.",sbOnDragEnter:"Drop image to upload it.",sbOnDrop:"Uploading image #images_names#...",sbProgress:"Uploading #file_name#: #progress#%",sbOnUploaded:"Uploaded #image_name#",sizeUnits:" B, KB, MB"},le={noFileGiven:"You must select a file.",typeNotAllowed:"This image type is not allowed.",fileTooLarge:"Image #image_name# is too big (#image_size#).\nMaximum file size is #image_max_size#.",importError:"Something went wrong when uploading the image #image_name#."};function se(e){(e=e||{}).parent=this;var t=!0;if(!1===e.autoDownloadFontAwesome&&(t=!1),!0!==e.autoDownloadFontAwesome)for(var n=document.styleSheets,i=0;i-1&&(t=!1);if(t){var r=document.createElement("link");r.rel="stylesheet",r.href="https://maxcdn.bootstrapcdn.com/font-awesome/latest/css/font-awesome.min.css",document.getElementsByTagName("head")[0].appendChild(r)}if(e.element)this.element=e.element;else if(null===e.element)return void console.log("EasyMDE: Error. No element was found.");if(void 0===e.toolbar)for(var o in e.toolbar=[],te)Object.prototype.hasOwnProperty.call(te,o)&&(-1!=o.indexOf("separator-")&&e.toolbar.push("|"),(!0===te[o].default||e.showIcons&&e.showIcons.constructor===Array&&-1!=e.showIcons.indexOf(o))&&e.toolbar.push(o));if(Object.prototype.hasOwnProperty.call(e,"previewClass")||(e.previewClass="editor-preview"),Object.prototype.hasOwnProperty.call(e,"status")||(e.status=["autosave","lines","words","cursor"],e.uploadImage&&e.status.unshift("upload-image")),e.previewRender||(e.previewRender=function(e){return this.parent.markdown(e)}),e.parsingConfig=Q({highlightFormatting:!0},e.parsingConfig||{}),e.insertTexts=Q({},ne,e.insertTexts||{}),e.promptTexts=Q({},ie,e.promptTexts||{}),e.blockStyles=Q({},oe,e.blockStyles||{}),null!=e.autosave&&(e.autosave.timeFormat=Q({},re,e.autosave.timeFormat||{})),e.iconClassMap=Q({},ee,e.iconClassMap||{}),e.shortcuts=Q({},u,e.shortcuts||{}),e.maxHeight=e.maxHeight||void 0,e.direction=e.direction||"ltr",void 0!==e.maxHeight?e.minHeight=e.maxHeight:e.minHeight=e.minHeight||"300px",e.errorCallback=e.errorCallback||function(e){alert(e)},e.uploadImage=e.uploadImage||!1,e.imageMaxSize=e.imageMaxSize||2097152,e.imageAccept=e.imageAccept||"image/png, image/jpeg, image/gif, image/avif",e.imageTexts=Q({},ae,e.imageTexts||{}),e.errorMessages=Q({},le,e.errorMessages||{}),e.imagePathAbsolute=e.imagePathAbsolute||!1,e.imageCSRFName=e.imageCSRFName||"csrfmiddlewaretoken",e.imageCSRFHeader=e.imageCSRFHeader||!1,null!=e.autosave&&null!=e.autosave.unique_id&&""!=e.autosave.unique_id&&(e.autosave.uniqueId=e.autosave.unique_id),e.overlayMode&&void 0===e.overlayMode.combine&&(e.overlayMode.combine=!0),this.options=e,this.render(),!e.initialValue||this.options.autosave&&!0===this.options.autosave.foundSavedValue||this.value(e.initialValue),e.uploadImage){var a=this;this.codemirror.on("dragenter",(function(e,t){a.updateStatusBar("upload-image",a.options.imageTexts.sbOnDragEnter),t.stopPropagation(),t.preventDefault()})),this.codemirror.on("dragend",(function(e,t){a.updateStatusBar("upload-image",a.options.imageTexts.sbInit),t.stopPropagation(),t.preventDefault()})),this.codemirror.on("dragleave",(function(e,t){a.updateStatusBar("upload-image",a.options.imageTexts.sbInit),t.stopPropagation(),t.preventDefault()})),this.codemirror.on("dragover",(function(e,t){a.updateStatusBar("upload-image",a.options.imageTexts.sbOnDragEnter),t.stopPropagation(),t.preventDefault()})),this.codemirror.on("drop",(function(t,n){n.stopPropagation(),n.preventDefault(),e.imageUploadFunction?a.uploadImagesUsingCustomFunction(e.imageUploadFunction,n.dataTransfer.files):a.uploadImages(n.dataTransfer.files)})),this.codemirror.on("paste",(function(t,n){e.imageUploadFunction?a.uploadImagesUsingCustomFunction(e.imageUploadFunction,n.clipboardData.files):a.uploadImages(n.clipboardData.files)}))}}function ue(){if("object"!=typeof localStorage)return!1;try{localStorage.setItem("smde_localStorage",1),localStorage.removeItem("smde_localStorage")}catch(e){return!1}return!0}se.prototype.uploadImages=function(e,t,n){if(0!==e.length){for(var i=[],r=0;r$/,' target="_blank">');e=e.replace(n,i)}}return e}(i))}},se.prototype.render=function(e){if(e||(e=this.element||document.getElementsByTagName("textarea")[0]),!this._rendered||this._rendered!==e){this.element=e;var t,n,o=this.options,a=this,l={};for(var u in o.shortcuts)null!==o.shortcuts[u]&&null!==s[u]&&function(e){l[d(o.shortcuts[e])]=function(){var t=s[e];"function"==typeof t?t(a):"string"==typeof t&&window.open(t,"_blank")}}(u);if(l.Enter="newlineAndIndentContinueMarkdownList",l.Tab="tabAndIndentMarkdownList",l["Shift-Tab"]="shiftTabAndUnindentMarkdownList",l.Esc=function(e){e.getOption("fullScreen")&&v(a)},this.documentOnKeyDown=function(e){27==(e=e||window.event).keyCode&&a.codemirror.getOption("fullScreen")&&v(a)},document.addEventListener("keydown",this.documentOnKeyDown,!1),o.overlayMode?(i.defineMode("overlay-mode",(function(e){return i.overlayMode(i.getMode(e,!1!==o.spellChecker?"spell-checker":"gfm"),o.overlayMode.mode,o.overlayMode.combine)})),t="overlay-mode",(n=o.parsingConfig).gitHubSpice=!1):((t=o.parsingConfig).name="gfm",t.gitHubSpice=!1),!1!==o.spellChecker&&(t="spell-checker",(n=o.parsingConfig).name="gfm",n.gitHubSpice=!1,"function"==typeof o.spellChecker?o.spellChecker({codeMirrorInstance:i}):r({codeMirrorInstance:i})),this.codemirror=i.fromTextArea(e,{mode:t,backdrop:n,theme:null!=o.theme?o.theme:"easymde",tabSize:null!=o.tabSize?o.tabSize:2,indentUnit:null!=o.tabSize?o.tabSize:2,indentWithTabs:!1!==o.indentWithTabs,lineNumbers:!0===o.lineNumbers,autofocus:!0===o.autofocus,extraKeys:l,direction:o.direction,lineWrapping:!1!==o.lineWrapping,allowDropFileTypes:["text/plain"],placeholder:o.placeholder||e.getAttribute("placeholder")||"",styleSelectedText:null!=o.styleSelectedText?o.styleSelectedText:!c(),scrollbarStyle:null!=o.scrollbarStyle?o.scrollbarStyle:"native",configureMouse:function(e,t,n){return{addNew:!1}},inputStyle:null!=o.inputStyle?o.inputStyle:c()?"contenteditable":"textarea",spellcheck:null==o.nativeSpellcheck||o.nativeSpellcheck,autoRefresh:null!=o.autoRefresh&&o.autoRefresh}),this.codemirror.getScrollerElement().style.minHeight=o.minHeight,void 0!==o.maxHeight&&(this.codemirror.getScrollerElement().style.height=o.maxHeight),!0===o.forceSync){var h=this.codemirror;h.on("change",(function(){h.save()}))}this.gui={};var f=document.createElement("div");f.classList.add("EasyMDEContainer"),f.setAttribute("role","application");var p=this.codemirror.getWrapperElement();p.parentNode.insertBefore(f,p),f.appendChild(p),!1!==o.toolbar&&(this.gui.toolbar=this.createToolbar()),!1!==o.status&&(this.gui.statusbar=this.createStatusbar()),null!=o.autosave&&!0===o.autosave.enabled&&(this.autosave(),this.codemirror.on("change",(function(){clearTimeout(a._autosave_timeout),a._autosave_timeout=setTimeout((function(){a.autosave()}),a.options.autosave.submit_delay||a.options.autosave.delay||1e3)})));var m=this;this.codemirror.on("update",(function(){o.previewImagesInEditor&&f.querySelectorAll(".cm-image-marker").forEach((function(e){var t=e.parentElement;if(t.innerText.match(/^!\[.*?\]\(.*\)/g)&&!t.hasAttribute("data-img-src")){var n=t.innerText.match("\\((.*)\\)");if(window.EMDEimagesCache||(window.EMDEimagesCache={}),n&&n.length>=2){var i=n[1];if(o.imagesPreviewHandler){var r=o.imagesPreviewHandler(n[1]);"string"==typeof r&&(i=r)}if(window.EMDEimagesCache[i])x(t,window.EMDEimagesCache[i]);else{var a=document.createElement("img");a.onload=function(){window.EMDEimagesCache[i]={naturalWidth:a.naturalWidth,naturalHeight:a.naturalHeight,url:i},x(t,window.EMDEimagesCache[i])},a.src=i}}}}))})),this.gui.sideBySide=this.createSideBySide(),this._rendered=this.element,(!0===o.autofocus||e.autofocus)&&this.codemirror.focus();var g=this.codemirror;setTimeout(function(){g.refresh()}.bind(g),0)}function x(e,t){var n,i;e.setAttribute("data-img-src",t.url),e.setAttribute("style","--bg-image:url("+t.url+");--width:"+t.naturalWidth+"px;--height:"+(n=t.naturalWidth,i=t.naturalHeight,nthis.options.imageMaxSize)r(o(this.options.errorMessages.fileTooLarge));else{var a=new FormData;a.append("image",e),i.options.imageCSRFToken&&!i.options.imageCSRFHeader&&a.append(i.options.imageCSRFName,i.options.imageCSRFToken);var l=new XMLHttpRequest;l.upload.onprogress=function(t){if(t.lengthComputable){var n=""+Math.round(100*t.loaded/t.total);i.updateStatusBar("upload-image",i.options.imageTexts.sbProgress.replace("#file_name#",e.name).replace("#progress#",n))}},l.open("POST",this.options.imageUploadEndpoint),i.options.imageCSRFToken&&i.options.imageCSRFHeader&&l.setRequestHeader(i.options.imageCSRFName,i.options.imageCSRFToken),l.onload=function(){try{var e=JSON.parse(this.responseText)}catch(e){return console.error("EasyMDE: The server did not return a valid json."),void r(o(i.options.errorMessages.importError))}200===this.status&&e&&!e.error&&e.data&&e.data.filePath?t((i.options.imagePathAbsolute?"":window.location.origin+"/")+e.data.filePath):e.error&&e.error in i.options.errorMessages?r(o(i.options.errorMessages[e.error])):e.error?r(o(e.error)):(console.error("EasyMDE: Received an unexpected response after uploading the image."+this.status+" ("+this.statusText+")"),r(o(i.options.errorMessages.importError)))},l.onerror=function(e){console.error("EasyMDE: An unexpected error occurred when trying to upload the image."+e.target.status+" ("+e.target.statusText+")"),r(i.options.errorMessages.importError)},l.send(a)}},se.prototype.uploadImageUsingCustomFunction=function(e,t){var n=this;e.apply(this,[t,function(e){R(n,e)},function(e){var i=function(e){var i=n.options.imageTexts.sizeUnits.split(",");return e.replace("#image_name#",t.name).replace("#image_size#",Z(t.size,i)).replace("#image_max_size#",Z(n.options.imageMaxSize,i))}(e);n.updateStatusBar("upload-image",i),setTimeout((function(){n.updateStatusBar("upload-image",n.options.imageTexts.sbInit)}),1e4),n.options.errorCallback(i)}])},se.prototype.setPreviewMaxHeight=function(){var e=this.codemirror.getWrapperElement(),t=e.nextSibling,n=parseInt(window.getComputedStyle(e).paddingTop),i=parseInt(window.getComputedStyle(e).borderTopWidth),r=(parseInt(this.options.maxHeight)+2*n+2*i).toString()+"px";t.style.height=r},se.prototype.createSideBySide=function(){var e=this.codemirror,t=e.getWrapperElement(),n=t.nextSibling;if(!n||!n.classList.contains("editor-preview-side")){if((n=document.createElement("div")).className="editor-preview-side",this.options.previewClass)if(Array.isArray(this.options.previewClass))for(var i=0;i + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/img/brainminder.svg b/assets/static/img/brainminder.svg new file mode 100644 index 0000000..bf3464c --- /dev/null +++ b/assets/static/img/brainminder.svg @@ -0,0 +1,3976 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/static/img/icons/128x128.png b/assets/static/img/icons/128x128.png new file mode 100644 index 0000000000000000000000000000000000000000..d12c65744dec47169319fc7ac17e0d36b47121c6 GIT binary patch literal 24358 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�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 F{TEow1@Zs@ literal 0 HcmV?d00001 diff --git a/assets/static/img/icons/144x144.png b/assets/static/img/icons/144x144.png new file mode 100644 index 0000000000000000000000000000000000000000..72696657cb39dc4c3914937e295d23d2e0929cbf GIT binary patch literal 25809 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 literal 0 HcmV?d00001 diff --git a/assets/static/img/icons/152x152.png b/assets/static/img/icons/152x152.png new file mode 100644 index 0000000000000000000000000000000000000000..52ef8486b8d86cfb9ad6ed9e2a12139ad40bff19 GIT binary patch literal 27146 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 literal 0 HcmV?d00001 diff --git a/assets/static/img/icons/192x192.png b/assets/static/img/icons/192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..76d2afdd5710ad7d9d2c978ebd86217cbcd530a0 GIT binary patch literal 32701 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 SBHo8Z+Gk{8_*ma1>i+;Ul`M7u literal 0 HcmV?d00001 diff --git a/assets/static/img/icons/384x384.png b/assets/static/img/icons/384x384.png new file mode 100644 index 0000000000000000000000000000000000000000..b120aa2ce4bec9ad2509fba9210dbf0a6dd7ad70 GIT binary patch literal 66769 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
    ; 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 literal 0 HcmV?d00001 diff --git a/assets/static/img/icons/512x512.png b/assets/static/img/icons/512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..f9d1644b7eff3af5e8785418784dda868d4a8882 GIT binary patch literal 93117 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 D$=EWI literal 0 HcmV?d00001 diff --git a/assets/static/img/icons/72x72.png b/assets/static/img/icons/72x72.png new file mode 100644 index 0000000000000000000000000000000000000000..1a03ba59cfd02560825c04aeae2346b0c06e91af GIT binary patch literal 18347 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 literal 0 HcmV?d00001 diff --git a/assets/static/img/icons/96x96.png b/assets/static/img/icons/96x96.png new file mode 100644 index 0000000000000000000000000000000000000000..e5218a93d1b78ebeae3824eea9a5e900051d8ab7 GIT binary patch literal 19868 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 z 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 In6DWB3*{aY_y7O^ literal 0 HcmV?d00001 diff --git a/assets/static/img/screenshots/BrainMinder-screenshot-wide.webp b/assets/static/img/screenshots/BrainMinder-screenshot-wide.webp new file mode 100644 index 0000000000000000000000000000000000000000..457977cf6e246c0de8ecf79e8f831405e74d8646 GIT binary patch literal 133772 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

    )tL7tLqslMVc&C-ab~VoBic!{p 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.length)&&(e=t.length);for(var n=0,o=new Array(e);n"===e[0]&&(e=e.substring(1)),t))try{if(t.matches)return t.matches(e);if(t.msMatchesSelector)return t.msMatchesSelector(e);if(t.webkitMatchesSelector)return t.webkitMatchesSelector(e)}catch(t){return}}function P(t,e,n,o){if(t){n=n||document;do{if(null!=e&&(">"!==e[0]||t.parentNode===n)&&p(t,e)||o&&t===n)return t}while(t!==n&&(t=(i=t).host&&i!==document&&i.host.nodeType?i.host:i.parentNode))}var i;return null}var g,m=/\s+/g;function k(t,e,n){var o;t&&e&&(t.classList?t.classList[n?"add":"remove"](e):(o=(" "+t.className+" ").replace(m," ").replace(" "+e+" "," "),t.className=(o+(n?" "+e:"")).replace(m," ")))}function R(t,e,n){var o=t&&t.style;if(o){if(void 0===n)return document.defaultView&&document.defaultView.getComputedStyle?n=document.defaultView.getComputedStyle(t,""):t.currentStyle&&(n=t.currentStyle),void 0===e?n:n[e];o[e=!(e in o||-1!==e.indexOf("webkit"))?"-webkit-"+e:e]=n+("string"==typeof n?"":"px")}}function v(t,e){var n="";if("string"==typeof t)n=t;else do{var o=R(t,"transform")}while(o&&"none"!==o&&(n=o+" "+n),!e&&(t=t.parentNode));var i=window.DOMMatrix||window.WebKitCSSMatrix||window.CSSMatrix||window.MSCSSMatrix;return i&&new i(n)}function b(t,e,n){if(t){var o=t.getElementsByTagName(e),i=0,r=o.length;if(n)for(;i=n.left-e&&i<=n.right+e,e=r>=n.top-e&&r<=n.bottom+e;return o&&e?a=t:void 0}}),a);if(e){var n,o={};for(n in t)t.hasOwnProperty(n)&&(o[n]=t[n]);o.target=o.rootEl=e,o.preventDefault=void 0,o.stopPropagation=void 0,e[K]._onDragOver(o)}}var i,r,a}function Bt(t){V&&V.parentNode[K]._isOutsideThisEl(t.target)}function Ft(t,e){if(!t||!t.nodeType||1!==t.nodeType)throw"Sortable: `el` must be an HTMLElement, not ".concat({}.toString.call(t));this.el=t,this.options=e=a({},e),t[K]=this;var n,o,i={group:null,sort:!0,disabled:!1,store:null,handle:null,draggable:/^[uo]l$/i.test(t.nodeName)?">li":">*",swapThreshold:1,invertSwap:!1,invertedSwapThreshold:null,removeCloneOnHide:!0,direction:function(){return Pt(t,this.options)},ghostClass:"sortable-ghost",chosenClass:"sortable-chosen",dragClass:"sortable-drag",ignore:"a, img",filter:null,preventOnFilter:!0,animation:0,easing:null,setData:function(t,e){t.setData("Text",e.textContent)},dropBubble:!1,dragoverBubble:!1,dataIdAttr:"data-id",delay:0,delayOnTouchOnly:!1,touchStartThreshold:(Number.parseInt?Number:window).parseInt(window.devicePixelRatio,10)||1,forceFallback:!1,fallbackClass:"sortable-fallback",fallbackOnBody:!1,fallbackTolerance:0,fallbackOffset:{x:0,y:0},supportPointer:!1!==Ft.supportPointer&&"PointerEvent"in window&&!u,emptyInsertThreshold:5};for(n in W.initializePlugins(this,t,i),i)n in e||(e[n]=i[n]);for(o in kt(e),this)"_"===o.charAt(0)&&"function"==typeof this[o]&&(this[o]=this[o].bind(this));this.nativeDraggable=!e.forceFallback&&Nt,this.nativeDraggable&&(this.options.touchStartThreshold=1),e.supportPointer?h(t,"pointerdown",this._onTapStart):(h(t,"mousedown",this._onTapStart),h(t,"touchstart",this._onTapStart)),this.nativeDraggable&&(h(t,"dragover",this),h(t,"dragenter",this)),Dt.push(this.el),e.store&&e.store.get&&this.sort(e.store.get(this)||[]),a(this,x())}function jt(t,e,n,o,i,r,a,l){var s,c,u=t[K],d=u.options.onMove;return!window.CustomEvent||y||w?(s=document.createEvent("Event")).initEvent("move",!0,!0):s=new CustomEvent("move",{bubbles:!0,cancelable:!0}),s.to=e,s.from=t,s.dragged=n,s.draggedRect=o,s.related=i||e,s.relatedRect=r||X(e),s.willInsertAfter=l,s.originalEvent=a,t.dispatchEvent(s),c=d?d.call(u,s,a):c}function Ht(t){t.draggable=!1}function Lt(){Tt=!1}function Kt(t){return setTimeout(t,0)}function Wt(t){return clearTimeout(t)}Ft.prototype={constructor:Ft,_isOutsideThisEl:function(t){this.el.contains(t)||t===this.el||(mt=null)},_getDirection:function(t,e){return"function"==typeof this.options.direction?this.options.direction.call(this,t,e,V):this.options.direction},_onTapStart:function(e){if(e.cancelable){var n=this,o=this.el,t=this.options,i=t.preventOnFilter,r=e.type,a=e.touches&&e.touches[0]||e.pointerType&&"touch"===e.pointerType&&e,l=(a||e).target,s=e.target.shadowRoot&&(e.path&&e.path[0]||e.composedPath&&e.composedPath()[0])||l,c=t.filter;if(!function(t){xt.length=0;var e=t.getElementsByTagName("input"),n=e.length;for(;n--;){var o=e[n];o.checked&&xt.push(o)}}(o),!V&&!(/mousedown|pointerdown/.test(r)&&0!==e.button||t.disabled)&&!s.isContentEditable&&(this.nativeDraggable||!u||!l||"SELECT"!==l.tagName.toUpperCase())&&!((l=P(l,t.draggable,o,!1))&&l.animated||tt===l)){if(ot=j(l),rt=j(l,t.draggable),"function"==typeof c){if(c.call(this,e,l,this))return q({sortable:n,rootEl:s,name:"filter",targetEl:l,toEl:o,fromEl:o}),G("filter",n,{evt:e}),void(i&&e.cancelable&&e.preventDefault())}else if(c=c&&c.split(",").some(function(t){if(t=P(s,t.trim(),o,!1))return q({sortable:n,rootEl:t,name:"filter",targetEl:l,fromEl:o,toEl:o}),G("filter",n,{evt:e}),!0}))return void(i&&e.cancelable&&e.preventDefault());t.handle&&!P(s,t.handle,o,!1)||this._prepareDragStart(e,a,l)}}},_prepareDragStart:function(t,e,n){var o,i=this,r=i.el,a=i.options,l=r.ownerDocument;n&&!V&&n.parentNode===r&&(o=X(n),Q=r,Z=(V=n).parentNode,J=V.nextSibling,tt=n,lt=a.group,ct={target:Ft.dragged=V,clientX:(e||t).clientX,clientY:(e||t).clientY},ft=ct.clientX-o.left,pt=ct.clientY-o.top,this._lastX=(e||t).clientX,this._lastY=(e||t).clientY,V.style["will-change"]="all",o=function(){G("delayEnded",i,{evt:t}),Ft.eventCanceled?i._onDrop():(i._disableDelayedDragEvents(),!s&&i.nativeDraggable&&(V.draggable=!0),i._triggerDragStart(t,e),q({sortable:i,name:"choose",originalEvent:t}),k(V,a.chosenClass,!0))},a.ignore.split(",").forEach(function(t){b(V,t.trim(),Ht)}),h(l,"dragover",Yt),h(l,"mousemove",Yt),h(l,"touchmove",Yt),h(l,"mouseup",i._onDrop),h(l,"touchend",i._onDrop),h(l,"touchcancel",i._onDrop),s&&this.nativeDraggable&&(this.options.touchStartThreshold=4,V.draggable=!0),G("delayStart",this,{evt:t}),!a.delay||a.delayOnTouchOnly&&!e||this.nativeDraggable&&(w||y)?o():Ft.eventCanceled?this._onDrop():(h(l,"mouseup",i._disableDelayedDrag),h(l,"touchend",i._disableDelayedDrag),h(l,"touchcancel",i._disableDelayedDrag),h(l,"mousemove",i._delayedDragTouchMoveHandler),h(l,"touchmove",i._delayedDragTouchMoveHandler),a.supportPointer&&h(l,"pointermove",i._delayedDragTouchMoveHandler),i._dragStartTimer=setTimeout(o,a.delay)))},_delayedDragTouchMoveHandler:function(t){t=t.touches?t.touches[0]:t;Math.max(Math.abs(t.clientX-this._lastX),Math.abs(t.clientY-this._lastY))>=Math.floor(this.options.touchStartThreshold/(this.nativeDraggable&&window.devicePixelRatio||1))&&this._disableDelayedDrag()},_disableDelayedDrag:function(){V&&Ht(V),clearTimeout(this._dragStartTimer),this._disableDelayedDragEvents()},_disableDelayedDragEvents:function(){var t=this.el.ownerDocument;f(t,"mouseup",this._disableDelayedDrag),f(t,"touchend",this._disableDelayedDrag),f(t,"touchcancel",this._disableDelayedDrag),f(t,"mousemove",this._delayedDragTouchMoveHandler),f(t,"touchmove",this._delayedDragTouchMoveHandler),f(t,"pointermove",this._delayedDragTouchMoveHandler)},_triggerDragStart:function(t,e){e=e||"touch"==t.pointerType&&t,!this.nativeDraggable||e?this.options.supportPointer?h(document,"pointermove",this._onTouchMove):h(document,e?"touchmove":"mousemove",this._onTouchMove):(h(V,"dragend",this),h(Q,"dragstart",this._onDragStart));try{document.selection?Kt(function(){document.selection.empty()}):window.getSelection().removeAllRanges()}catch(t){}},_dragStarted:function(t,e){var n;wt=!1,Q&&V?(G("dragStarted",this,{evt:e}),this.nativeDraggable&&h(document,"dragover",Bt),n=this.options,t||k(V,n.dragClass,!1),k(V,n.ghostClass,!0),Ft.active=this,t&&this._appendGhost(),q({sortable:this,name:"start",originalEvent:e})):this._nulling()},_emulateDragOver:function(){if(ut){this._lastX=ut.clientX,this._lastY=ut.clientY,Rt();for(var t=document.elementFromPoint(ut.clientX,ut.clientY),e=t;t&&t.shadowRoot&&(t=t.shadowRoot.elementFromPoint(ut.clientX,ut.clientY))!==e;)e=t;if(V.parentNode[K]._isOutsideThisEl(t),e)do{if(e[K])if(e[K]._onDragOver({clientX:ut.clientX,clientY:ut.clientY,target:t,rootEl:e})&&!this.options.dragoverBubble)break}while(e=(t=e).parentNode);Xt()}},_onTouchMove:function(t){if(ct){var e=this.options,n=e.fallbackTolerance,o=e.fallbackOffset,i=t.touches?t.touches[0]:t,r=$&&v($,!0),a=$&&r&&r.a,l=$&&r&&r.d,e=Mt&&yt&&E(yt),a=(i.clientX-ct.clientX+o.x)/(a||1)+(e?e[0]-Ct[0]:0)/(a||1),l=(i.clientY-ct.clientY+o.y)/(l||1)+(e?e[1]-Ct[1]:0)/(l||1);if(!Ft.active&&!wt){if(n&&Math.max(Math.abs(i.clientX-this._lastX),Math.abs(i.clientY-this._lastY))D.right+10||S.clientY>x.bottom&&S.clientX>x.left:S.clientY>D.bottom+10||S.clientX>x.right&&S.clientY>x.top)||m.animated)){if(m&&(t=n,e=r,C=X(B((_=this).el,0,_.options,!0)),_=L(_.el,_.options,$),e?t.clientX<_.left-10||t.clientY= 2.0.0-beta.1', + 7: '>= 4.0.0 <4.3.0', + 8: '>= 4.3.0' + }; + + exports.REVISION_CHANGES = REVISION_CHANGES; + var objectType = '[object Object]'; + + function HandlebarsEnvironment(helpers, partials, decorators) { + this.helpers = helpers || {}; + this.partials = partials || {}; + this.decorators = decorators || {}; + + _helpers.registerDefaultHelpers(this); + _decorators.registerDefaultDecorators(this); + } + + HandlebarsEnvironment.prototype = { + constructor: HandlebarsEnvironment, + + logger: _logger2['default'], + log: _logger2['default'].log, + + registerHelper: function registerHelper(name, fn) { + if (_utils.toString.call(name) === objectType) { + if (fn) { + throw new _exception2['default']('Arg not supported with multiple helpers'); + } + _utils.extend(this.helpers, name); + } else { + this.helpers[name] = fn; + } + }, + unregisterHelper: function unregisterHelper(name) { + delete this.helpers[name]; + }, + + registerPartial: function registerPartial(name, partial) { + if (_utils.toString.call(name) === objectType) { + _utils.extend(this.partials, name); + } else { + if (typeof partial === 'undefined') { + throw new _exception2['default']('Attempting to register a partial called "' + name + '" as undefined'); + } + this.partials[name] = partial; + } + }, + unregisterPartial: function unregisterPartial(name) { + delete this.partials[name]; + }, + + registerDecorator: function registerDecorator(name, fn) { + if (_utils.toString.call(name) === objectType) { + if (fn) { + throw new _exception2['default']('Arg not supported with multiple decorators'); + } + _utils.extend(this.decorators, name); + } else { + this.decorators[name] = fn; + } + }, + unregisterDecorator: function unregisterDecorator(name) { + delete this.decorators[name]; + }, + /** + * Reset the memory of illegal property accesses that have already been logged. + * @deprecated should only be used in handlebars test-cases + */ + resetLoggedPropertyAccesses: function resetLoggedPropertyAccesses() { + _internalProtoAccess.resetLoggedProperties(); + } + }; + + var log = _logger2['default'].log; + + exports.log = log; + exports.createFrame = _utils.createFrame; + exports.logger = _logger2['default']; + +/***/ }), +/* 4 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + exports.extend = extend; + exports.indexOf = indexOf; + exports.escapeExpression = escapeExpression; + exports.isEmpty = isEmpty; + exports.createFrame = createFrame; + exports.blockParams = blockParams; + exports.appendContextPath = appendContextPath; + var escape = { + '&': '&', + '<': '<', + '>': '>', + '"': '"', + "'": ''', + '`': '`', + '=': '=' + }; + + var badChars = /[&<>"'`=]/g, + possible = /[&<>"'`=]/; + + function escapeChar(chr) { + return escape[chr]; + } + + function extend(obj /* , ...source */) { + for (var i = 1; i < arguments.length; i++) { + for (var key in arguments[i]) { + if (Object.prototype.hasOwnProperty.call(arguments[i], key)) { + obj[key] = arguments[i][key]; + } + } + } + + return obj; + } + + var toString = Object.prototype.toString; + + exports.toString = toString; + // Sourced from lodash + // https://github.com/bestiejs/lodash/blob/master/LICENSE.txt + /* eslint-disable func-style */ + var isFunction = function isFunction(value) { + return typeof value === 'function'; + }; + // fallback for older versions of Chrome and Safari + /* istanbul ignore next */ + if (isFunction(/x/)) { + exports.isFunction = isFunction = function (value) { + return typeof value === 'function' && toString.call(value) === '[object Function]'; + }; + } + exports.isFunction = isFunction; + + /* eslint-enable func-style */ + + /* istanbul ignore next */ + var isArray = Array.isArray || function (value) { + return value && typeof value === 'object' ? toString.call(value) === '[object Array]' : false; + }; + + exports.isArray = isArray; + // Older IE versions do not directly support indexOf so we must implement our own, sadly. + + function indexOf(array, value) { + for (var i = 0, len = array.length; i < len; i++) { + if (array[i] === value) { + return i; + } + } + return -1; + } + + function escapeExpression(string) { + if (typeof string !== 'string') { + // don't escape SafeStrings, since they're already safe + if (string && string.toHTML) { + return string.toHTML(); + } else if (string == null) { + return ''; + } else if (!string) { + return string + ''; + } + + // Force a string conversion as this will be done by the append regardless and + // the regex test will do this transparently behind the scenes, causing issues if + // an object's to string has escaped characters in it. + string = '' + string; + } + + if (!possible.test(string)) { + return string; + } + return string.replace(badChars, escapeChar); + } + + function isEmpty(value) { + if (!value && value !== 0) { + return true; + } else if (isArray(value) && value.length === 0) { + return true; + } else { + return false; + } + } + + function createFrame(object) { + var frame = extend({}, object); + frame._parent = object; + return frame; + } + + function blockParams(params, ids) { + params.path = ids; + return params; + } + + function appendContextPath(contextPath, id) { + return (contextPath ? contextPath + '.' : '') + id; + } + +/***/ }), +/* 5 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Object$defineProperty = __webpack_require__(6)['default']; + + exports.__esModule = true; + var errorProps = ['description', 'fileName', 'lineNumber', 'endLineNumber', 'message', 'name', 'number', 'stack']; + + function Exception(message, node) { + var loc = node && node.loc, + line = undefined, + endLineNumber = undefined, + column = undefined, + endColumn = undefined; + + if (loc) { + line = loc.start.line; + endLineNumber = loc.end.line; + column = loc.start.column; + endColumn = loc.end.column; + + message += ' - ' + line + ':' + column; + } + + var tmp = Error.prototype.constructor.call(this, message); + + // Unfortunately errors are not enumerable in Chrome (at least), so `for prop in tmp` doesn't work. + for (var idx = 0; idx < errorProps.length; idx++) { + this[errorProps[idx]] = tmp[errorProps[idx]]; + } + + /* istanbul ignore else */ + if (Error.captureStackTrace) { + Error.captureStackTrace(this, Exception); + } + + try { + if (loc) { + this.lineNumber = line; + this.endLineNumber = endLineNumber; + + // Work around issue under safari where we can't directly set the column value + /* istanbul ignore next */ + if (_Object$defineProperty) { + Object.defineProperty(this, 'column', { + value: column, + enumerable: true + }); + Object.defineProperty(this, 'endColumn', { + value: endColumn, + enumerable: true + }); + } else { + this.column = column; + this.endColumn = endColumn; + } + } + } catch (nop) { + /* Ignore if the browser is very particular */ + } + } + + Exception.prototype = new Error(); + + exports['default'] = Exception; + module.exports = exports['default']; + +/***/ }), +/* 6 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(7), __esModule: true }; + +/***/ }), +/* 7 */ +/***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__(8); + module.exports = function defineProperty(it, key, desc){ + return $.setDesc(it, key, desc); + }; + +/***/ }), +/* 8 */ +/***/ (function(module, exports) { + + var $Object = Object; + module.exports = { + create: $Object.create, + getProto: $Object.getPrototypeOf, + isEnum: {}.propertyIsEnumerable, + getDesc: $Object.getOwnPropertyDescriptor, + setDesc: $Object.defineProperty, + setDescs: $Object.defineProperties, + getKeys: $Object.keys, + getNames: $Object.getOwnPropertyNames, + getSymbols: $Object.getOwnPropertySymbols, + each: [].forEach + }; + +/***/ }), +/* 9 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(2)['default']; + + exports.__esModule = true; + exports.registerDefaultHelpers = registerDefaultHelpers; + exports.moveHelperToHooks = moveHelperToHooks; + + var _helpersBlockHelperMissing = __webpack_require__(10); + + var _helpersBlockHelperMissing2 = _interopRequireDefault(_helpersBlockHelperMissing); + + var _helpersEach = __webpack_require__(11); + + var _helpersEach2 = _interopRequireDefault(_helpersEach); + + var _helpersHelperMissing = __webpack_require__(64); + + var _helpersHelperMissing2 = _interopRequireDefault(_helpersHelperMissing); + + var _helpersIf = __webpack_require__(65); + + var _helpersIf2 = _interopRequireDefault(_helpersIf); + + var _helpersLog = __webpack_require__(66); + + var _helpersLog2 = _interopRequireDefault(_helpersLog); + + var _helpersLookup = __webpack_require__(67); + + var _helpersLookup2 = _interopRequireDefault(_helpersLookup); + + var _helpersWith = __webpack_require__(68); + + var _helpersWith2 = _interopRequireDefault(_helpersWith); + + function registerDefaultHelpers(instance) { + _helpersBlockHelperMissing2['default'](instance); + _helpersEach2['default'](instance); + _helpersHelperMissing2['default'](instance); + _helpersIf2['default'](instance); + _helpersLog2['default'](instance); + _helpersLookup2['default'](instance); + _helpersWith2['default'](instance); + } + + function moveHelperToHooks(instance, helperName, keepHelper) { + if (instance.helpers[helperName]) { + instance.hooks[helperName] = instance.helpers[helperName]; + if (!keepHelper) { + delete instance.helpers[helperName]; + } + } + } + +/***/ }), +/* 10 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _utils = __webpack_require__(4); + + exports['default'] = function (instance) { + instance.registerHelper('blockHelperMissing', function (context, options) { + var inverse = options.inverse, + fn = options.fn; + + if (context === true) { + return fn(this); + } else if (context === false || context == null) { + return inverse(this); + } else if (_utils.isArray(context)) { + if (context.length > 0) { + if (options.ids) { + options.ids = [options.name]; + } + + return instance.helpers.each(context, options); + } else { + return inverse(this); + } + } else { + if (options.data && options.ids) { + var data = _utils.createFrame(options.data); + data.contextPath = _utils.appendContextPath(options.data.contextPath, options.name); + options = { data: data }; + } + + return fn(context, options); + } + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 11 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Symbol = __webpack_require__(12)['default']; + + var _Symbol$iterator = __webpack_require__(42)['default']; + + var _getIterator = __webpack_require__(54)['default']; + + var _Object$keys = __webpack_require__(59)['default']; + + var _interopRequireDefault = __webpack_require__(2)['default']; + + exports.__esModule = true; + + var _utils = __webpack_require__(4); + + var _exception = __webpack_require__(5); + + var _exception2 = _interopRequireDefault(_exception); + + exports['default'] = function (instance) { + instance.registerHelper('each', function (context, options) { + if (!options) { + throw new _exception2['default']('Must pass iterator to #each'); + } + + var fn = options.fn, + inverse = options.inverse, + i = 0, + ret = '', + data = undefined, + contextPath = undefined; + + if (options.data && options.ids) { + contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]) + '.'; + } + + if (_utils.isFunction(context)) { + context = context.call(this); + } + + if (options.data) { + data = _utils.createFrame(options.data); + } + + function execIteration(field, index, last) { + if (data) { + data.key = field; + data.index = index; + data.first = index === 0; + data.last = !!last; + + if (contextPath) { + data.contextPath = contextPath + field; + } + } + + ret = ret + fn(context[field], { + data: data, + blockParams: _utils.blockParams([context[field], field], [contextPath + field, null]) + }); + } + + if (context && typeof context === 'object') { + if (_utils.isArray(context)) { + for (var j = context.length; i < j; i++) { + if (i in context) { + execIteration(i, i, i === context.length - 1); + } + } + } else if (typeof _Symbol === 'function' && context[_Symbol$iterator]) { + var newContext = []; + var iterator = _getIterator(context); + for (var it = iterator.next(); !it.done; it = iterator.next()) { + newContext.push(it.value); + } + context = newContext; + for (var j = context.length; i < j; i++) { + execIteration(i, i, i === context.length - 1); + } + } else { + (function () { + var priorKey = undefined; + + _Object$keys(context).forEach(function (key) { + // We're running the iterations one step out of sync so we can detect + // the last iteration without have to scan the object twice and create + // an itermediate keys array. + if (priorKey !== undefined) { + execIteration(priorKey, i - 1); + } + priorKey = key; + i++; + }); + if (priorKey !== undefined) { + execIteration(priorKey, i - 1, true); + } + })(); + } + } + + if (i === 0) { + ret = inverse(this); + } + + return ret; + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 12 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(13), __esModule: true }; + +/***/ }), +/* 13 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(14); + __webpack_require__(41); + module.exports = __webpack_require__(20).Symbol; + +/***/ }), +/* 14 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + // ECMAScript 6 symbols shim + var $ = __webpack_require__(8) + , global = __webpack_require__(15) + , has = __webpack_require__(16) + , DESCRIPTORS = __webpack_require__(17) + , $export = __webpack_require__(19) + , redefine = __webpack_require__(23) + , $fails = __webpack_require__(18) + , shared = __webpack_require__(26) + , setToStringTag = __webpack_require__(27) + , uid = __webpack_require__(29) + , wks = __webpack_require__(28) + , keyOf = __webpack_require__(30) + , $names = __webpack_require__(35) + , enumKeys = __webpack_require__(36) + , isArray = __webpack_require__(37) + , anObject = __webpack_require__(38) + , toIObject = __webpack_require__(31) + , createDesc = __webpack_require__(25) + , getDesc = $.getDesc + , setDesc = $.setDesc + , _create = $.create + , getNames = $names.get + , $Symbol = global.Symbol + , $JSON = global.JSON + , _stringify = $JSON && $JSON.stringify + , setter = false + , HIDDEN = wks('_hidden') + , isEnum = $.isEnum + , SymbolRegistry = shared('symbol-registry') + , AllSymbols = shared('symbols') + , useNative = typeof $Symbol == 'function' + , ObjectProto = Object.prototype; + + // fallback for old Android, https://code.google.com/p/v8/issues/detail?id=687 + var setSymbolDesc = DESCRIPTORS && $fails(function(){ + return _create(setDesc({}, 'a', { + get: function(){ return setDesc(this, 'a', {value: 7}).a; } + })).a != 7; + }) ? function(it, key, D){ + var protoDesc = getDesc(ObjectProto, key); + if(protoDesc)delete ObjectProto[key]; + setDesc(it, key, D); + if(protoDesc && it !== ObjectProto)setDesc(ObjectProto, key, protoDesc); + } : setDesc; + + var wrap = function(tag){ + var sym = AllSymbols[tag] = _create($Symbol.prototype); + sym._k = tag; + DESCRIPTORS && setter && setSymbolDesc(ObjectProto, tag, { + configurable: true, + set: function(value){ + if(has(this, HIDDEN) && has(this[HIDDEN], tag))this[HIDDEN][tag] = false; + setSymbolDesc(this, tag, createDesc(1, value)); + } + }); + return sym; + }; + + var isSymbol = function(it){ + return typeof it == 'symbol'; + }; + + var $defineProperty = function defineProperty(it, key, D){ + if(D && has(AllSymbols, key)){ + if(!D.enumerable){ + if(!has(it, HIDDEN))setDesc(it, HIDDEN, createDesc(1, {})); + it[HIDDEN][key] = true; + } else { + if(has(it, HIDDEN) && it[HIDDEN][key])it[HIDDEN][key] = false; + D = _create(D, {enumerable: createDesc(0, false)}); + } return setSymbolDesc(it, key, D); + } return setDesc(it, key, D); + }; + var $defineProperties = function defineProperties(it, P){ + anObject(it); + var keys = enumKeys(P = toIObject(P)) + , i = 0 + , l = keys.length + , key; + while(l > i)$defineProperty(it, key = keys[i++], P[key]); + return it; + }; + var $create = function create(it, P){ + return P === undefined ? _create(it) : $defineProperties(_create(it), P); + }; + var $propertyIsEnumerable = function propertyIsEnumerable(key){ + var E = isEnum.call(this, key); + return E || !has(this, key) || !has(AllSymbols, key) || has(this, HIDDEN) && this[HIDDEN][key] + ? E : true; + }; + var $getOwnPropertyDescriptor = function getOwnPropertyDescriptor(it, key){ + var D = getDesc(it = toIObject(it), key); + if(D && has(AllSymbols, key) && !(has(it, HIDDEN) && it[HIDDEN][key]))D.enumerable = true; + return D; + }; + var $getOwnPropertyNames = function getOwnPropertyNames(it){ + var names = getNames(toIObject(it)) + , result = [] + , i = 0 + , key; + while(names.length > i)if(!has(AllSymbols, key = names[i++]) && key != HIDDEN)result.push(key); + return result; + }; + var $getOwnPropertySymbols = function getOwnPropertySymbols(it){ + var names = getNames(toIObject(it)) + , result = [] + , i = 0 + , key; + while(names.length > i)if(has(AllSymbols, key = names[i++]))result.push(AllSymbols[key]); + return result; + }; + var $stringify = function stringify(it){ + if(it === undefined || isSymbol(it))return; // IE8 returns string on undefined + var args = [it] + , i = 1 + , $$ = arguments + , replacer, $replacer; + while($$.length > i)args.push($$[i++]); + replacer = args[1]; + if(typeof replacer == 'function')$replacer = replacer; + if($replacer || !isArray(replacer))replacer = function(key, value){ + if($replacer)value = $replacer.call(this, key, value); + if(!isSymbol(value))return value; + }; + args[1] = replacer; + return _stringify.apply($JSON, args); + }; + var buggyJSON = $fails(function(){ + var S = $Symbol(); + // MS Edge converts symbol values to JSON as {} + // WebKit converts symbol values to JSON as null + // V8 throws on boxed symbols + return _stringify([S]) != '[null]' || _stringify({a: S}) != '{}' || _stringify(Object(S)) != '{}'; + }); + + // 19.4.1.1 Symbol([description]) + if(!useNative){ + $Symbol = function Symbol(){ + if(isSymbol(this))throw TypeError('Symbol is not a constructor'); + return wrap(uid(arguments.length > 0 ? arguments[0] : undefined)); + }; + redefine($Symbol.prototype, 'toString', function toString(){ + return this._k; + }); + + isSymbol = function(it){ + return it instanceof $Symbol; + }; + + $.create = $create; + $.isEnum = $propertyIsEnumerable; + $.getDesc = $getOwnPropertyDescriptor; + $.setDesc = $defineProperty; + $.setDescs = $defineProperties; + $.getNames = $names.get = $getOwnPropertyNames; + $.getSymbols = $getOwnPropertySymbols; + + if(DESCRIPTORS && !__webpack_require__(40)){ + redefine(ObjectProto, 'propertyIsEnumerable', $propertyIsEnumerable, true); + } + } + + var symbolStatics = { + // 19.4.2.1 Symbol.for(key) + 'for': function(key){ + return has(SymbolRegistry, key += '') + ? SymbolRegistry[key] + : SymbolRegistry[key] = $Symbol(key); + }, + // 19.4.2.5 Symbol.keyFor(sym) + keyFor: function keyFor(key){ + return keyOf(SymbolRegistry, key); + }, + useSetter: function(){ setter = true; }, + useSimple: function(){ setter = false; } + }; + // 19.4.2.2 Symbol.hasInstance + // 19.4.2.3 Symbol.isConcatSpreadable + // 19.4.2.4 Symbol.iterator + // 19.4.2.6 Symbol.match + // 19.4.2.8 Symbol.replace + // 19.4.2.9 Symbol.search + // 19.4.2.10 Symbol.species + // 19.4.2.11 Symbol.split + // 19.4.2.12 Symbol.toPrimitive + // 19.4.2.13 Symbol.toStringTag + // 19.4.2.14 Symbol.unscopables + $.each.call(( + 'hasInstance,isConcatSpreadable,iterator,match,replace,search,' + + 'species,split,toPrimitive,toStringTag,unscopables' + ).split(','), function(it){ + var sym = wks(it); + symbolStatics[it] = useNative ? sym : wrap(sym); + }); + + setter = true; + + $export($export.G + $export.W, {Symbol: $Symbol}); + + $export($export.S, 'Symbol', symbolStatics); + + $export($export.S + $export.F * !useNative, 'Object', { + // 19.1.2.2 Object.create(O [, Properties]) + create: $create, + // 19.1.2.4 Object.defineProperty(O, P, Attributes) + defineProperty: $defineProperty, + // 19.1.2.3 Object.defineProperties(O, Properties) + defineProperties: $defineProperties, + // 19.1.2.6 Object.getOwnPropertyDescriptor(O, P) + getOwnPropertyDescriptor: $getOwnPropertyDescriptor, + // 19.1.2.7 Object.getOwnPropertyNames(O) + getOwnPropertyNames: $getOwnPropertyNames, + // 19.1.2.8 Object.getOwnPropertySymbols(O) + getOwnPropertySymbols: $getOwnPropertySymbols + }); + + // 24.3.2 JSON.stringify(value [, replacer [, space]]) + $JSON && $export($export.S + $export.F * (!useNative || buggyJSON), 'JSON', {stringify: $stringify}); + + // 19.4.3.5 Symbol.prototype[@@toStringTag] + setToStringTag($Symbol, 'Symbol'); + // 20.2.1.9 Math[@@toStringTag] + setToStringTag(Math, 'Math', true); + // 24.3.3 JSON[@@toStringTag] + setToStringTag(global.JSON, 'JSON', true); + +/***/ }), +/* 15 */ +/***/ (function(module, exports) { + + // https://github.com/zloirock/core-js/issues/86#issuecomment-115759028 + var global = module.exports = typeof window != 'undefined' && window.Math == Math + ? window : typeof self != 'undefined' && self.Math == Math ? self : Function('return this')(); + if(typeof __g == 'number')__g = global; // eslint-disable-line no-undef + +/***/ }), +/* 16 */ +/***/ (function(module, exports) { + + var hasOwnProperty = {}.hasOwnProperty; + module.exports = function(it, key){ + return hasOwnProperty.call(it, key); + }; + +/***/ }), +/* 17 */ +/***/ (function(module, exports, __webpack_require__) { + + // Thank's IE8 for his funny defineProperty + module.exports = !__webpack_require__(18)(function(){ + return Object.defineProperty({}, 'a', {get: function(){ return 7; }}).a != 7; + }); + +/***/ }), +/* 18 */ +/***/ (function(module, exports) { + + module.exports = function(exec){ + try { + return !!exec(); + } catch(e){ + return true; + } + }; + +/***/ }), +/* 19 */ +/***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__(15) + , core = __webpack_require__(20) + , ctx = __webpack_require__(21) + , PROTOTYPE = 'prototype'; + + var $export = function(type, name, source){ + var IS_FORCED = type & $export.F + , IS_GLOBAL = type & $export.G + , IS_STATIC = type & $export.S + , IS_PROTO = type & $export.P + , IS_BIND = type & $export.B + , IS_WRAP = type & $export.W + , exports = IS_GLOBAL ? core : core[name] || (core[name] = {}) + , target = IS_GLOBAL ? global : IS_STATIC ? global[name] : (global[name] || {})[PROTOTYPE] + , key, own, out; + if(IS_GLOBAL)source = name; + for(key in source){ + // contains in native + own = !IS_FORCED && target && key in target; + if(own && key in exports)continue; + // export native or passed + out = own ? target[key] : source[key]; + // prevent global pollution for namespaces + exports[key] = IS_GLOBAL && typeof target[key] != 'function' ? source[key] + // bind timers to global for call from export context + : IS_BIND && own ? ctx(out, global) + // wrap global constructors for prevent change them in library + : IS_WRAP && target[key] == out ? (function(C){ + var F = function(param){ + return this instanceof C ? new C(param) : C(param); + }; + F[PROTOTYPE] = C[PROTOTYPE]; + return F; + // make static versions for prototype methods + })(out) : IS_PROTO && typeof out == 'function' ? ctx(Function.call, out) : out; + if(IS_PROTO)(exports[PROTOTYPE] || (exports[PROTOTYPE] = {}))[key] = out; + } + }; + // type bitmap + $export.F = 1; // forced + $export.G = 2; // global + $export.S = 4; // static + $export.P = 8; // proto + $export.B = 16; // bind + $export.W = 32; // wrap + module.exports = $export; + +/***/ }), +/* 20 */ +/***/ (function(module, exports) { + + var core = module.exports = {version: '1.2.6'}; + if(typeof __e == 'number')__e = core; // eslint-disable-line no-undef + +/***/ }), +/* 21 */ +/***/ (function(module, exports, __webpack_require__) { + + // optional / simple context binding + var aFunction = __webpack_require__(22); + module.exports = function(fn, that, length){ + aFunction(fn); + if(that === undefined)return fn; + switch(length){ + case 1: return function(a){ + return fn.call(that, a); + }; + case 2: return function(a, b){ + return fn.call(that, a, b); + }; + case 3: return function(a, b, c){ + return fn.call(that, a, b, c); + }; + } + return function(/* ...args */){ + return fn.apply(that, arguments); + }; + }; + +/***/ }), +/* 22 */ +/***/ (function(module, exports) { + + module.exports = function(it){ + if(typeof it != 'function')throw TypeError(it + ' is not a function!'); + return it; + }; + +/***/ }), +/* 23 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = __webpack_require__(24); + +/***/ }), +/* 24 */ +/***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__(8) + , createDesc = __webpack_require__(25); + module.exports = __webpack_require__(17) ? function(object, key, value){ + return $.setDesc(object, key, createDesc(1, value)); + } : function(object, key, value){ + object[key] = value; + return object; + }; + +/***/ }), +/* 25 */ +/***/ (function(module, exports) { + + module.exports = function(bitmap, value){ + return { + enumerable : !(bitmap & 1), + configurable: !(bitmap & 2), + writable : !(bitmap & 4), + value : value + }; + }; + +/***/ }), +/* 26 */ +/***/ (function(module, exports, __webpack_require__) { + + var global = __webpack_require__(15) + , SHARED = '__core-js_shared__' + , store = global[SHARED] || (global[SHARED] = {}); + module.exports = function(key){ + return store[key] || (store[key] = {}); + }; + +/***/ }), +/* 27 */ +/***/ (function(module, exports, __webpack_require__) { + + var def = __webpack_require__(8).setDesc + , has = __webpack_require__(16) + , TAG = __webpack_require__(28)('toStringTag'); + + module.exports = function(it, tag, stat){ + if(it && !has(it = stat ? it : it.prototype, TAG))def(it, TAG, {configurable: true, value: tag}); + }; + +/***/ }), +/* 28 */ +/***/ (function(module, exports, __webpack_require__) { + + var store = __webpack_require__(26)('wks') + , uid = __webpack_require__(29) + , Symbol = __webpack_require__(15).Symbol; + module.exports = function(name){ + return store[name] || (store[name] = + Symbol && Symbol[name] || (Symbol || uid)('Symbol.' + name)); + }; + +/***/ }), +/* 29 */ +/***/ (function(module, exports) { + + var id = 0 + , px = Math.random(); + module.exports = function(key){ + return 'Symbol('.concat(key === undefined ? '' : key, ')_', (++id + px).toString(36)); + }; + +/***/ }), +/* 30 */ +/***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__(8) + , toIObject = __webpack_require__(31); + module.exports = function(object, el){ + var O = toIObject(object) + , keys = $.getKeys(O) + , length = keys.length + , index = 0 + , key; + while(length > index)if(O[key = keys[index++]] === el)return key; + }; + +/***/ }), +/* 31 */ +/***/ (function(module, exports, __webpack_require__) { + + // to indexed object, toObject with fallback for non-array-like ES3 strings + var IObject = __webpack_require__(32) + , defined = __webpack_require__(34); + module.exports = function(it){ + return IObject(defined(it)); + }; + +/***/ }), +/* 32 */ +/***/ (function(module, exports, __webpack_require__) { + + // fallback for non-array-like ES3 and non-enumerable old V8 strings + var cof = __webpack_require__(33); + module.exports = Object('z').propertyIsEnumerable(0) ? Object : function(it){ + return cof(it) == 'String' ? it.split('') : Object(it); + }; + +/***/ }), +/* 33 */ +/***/ (function(module, exports) { + + var toString = {}.toString; + + module.exports = function(it){ + return toString.call(it).slice(8, -1); + }; + +/***/ }), +/* 34 */ +/***/ (function(module, exports) { + + // 7.2.1 RequireObjectCoercible(argument) + module.exports = function(it){ + if(it == undefined)throw TypeError("Can't call method on " + it); + return it; + }; + +/***/ }), +/* 35 */ +/***/ (function(module, exports, __webpack_require__) { + + // fallback for IE11 buggy Object.getOwnPropertyNames with iframe and window + var toIObject = __webpack_require__(31) + , getNames = __webpack_require__(8).getNames + , toString = {}.toString; + + var windowNames = typeof window == 'object' && Object.getOwnPropertyNames + ? Object.getOwnPropertyNames(window) : []; + + var getWindowNames = function(it){ + try { + return getNames(it); + } catch(e){ + return windowNames.slice(); + } + }; + + module.exports.get = function getOwnPropertyNames(it){ + if(windowNames && toString.call(it) == '[object Window]')return getWindowNames(it); + return getNames(toIObject(it)); + }; + +/***/ }), +/* 36 */ +/***/ (function(module, exports, __webpack_require__) { + + // all enumerable object keys, includes symbols + var $ = __webpack_require__(8); + module.exports = function(it){ + var keys = $.getKeys(it) + , getSymbols = $.getSymbols; + if(getSymbols){ + var symbols = getSymbols(it) + , isEnum = $.isEnum + , i = 0 + , key; + while(symbols.length > i)if(isEnum.call(it, key = symbols[i++]))keys.push(key); + } + return keys; + }; + +/***/ }), +/* 37 */ +/***/ (function(module, exports, __webpack_require__) { + + // 7.2.2 IsArray(argument) + var cof = __webpack_require__(33); + module.exports = Array.isArray || function(arg){ + return cof(arg) == 'Array'; + }; + +/***/ }), +/* 38 */ +/***/ (function(module, exports, __webpack_require__) { + + var isObject = __webpack_require__(39); + module.exports = function(it){ + if(!isObject(it))throw TypeError(it + ' is not an object!'); + return it; + }; + +/***/ }), +/* 39 */ +/***/ (function(module, exports) { + + module.exports = function(it){ + return typeof it === 'object' ? it !== null : typeof it === 'function'; + }; + +/***/ }), +/* 40 */ +/***/ (function(module, exports) { + + module.exports = true; + +/***/ }), +/* 41 */ +/***/ (function(module, exports) { + + + +/***/ }), +/* 42 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(43), __esModule: true }; + +/***/ }), +/* 43 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(44); + __webpack_require__(50); + module.exports = __webpack_require__(28)('iterator'); + +/***/ }), +/* 44 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + var $at = __webpack_require__(45)(true); + + // 21.1.3.27 String.prototype[@@iterator]() + __webpack_require__(47)(String, 'String', function(iterated){ + this._t = String(iterated); // target + this._i = 0; // next index + // 21.1.5.2.1 %StringIteratorPrototype%.next() + }, function(){ + var O = this._t + , index = this._i + , point; + if(index >= O.length)return {value: undefined, done: true}; + point = $at(O, index); + this._i += point.length; + return {value: point, done: false}; + }); + +/***/ }), +/* 45 */ +/***/ (function(module, exports, __webpack_require__) { + + var toInteger = __webpack_require__(46) + , defined = __webpack_require__(34); + // true -> String#at + // false -> String#codePointAt + module.exports = function(TO_STRING){ + return function(that, pos){ + var s = String(defined(that)) + , i = toInteger(pos) + , l = s.length + , a, b; + if(i < 0 || i >= l)return TO_STRING ? '' : undefined; + a = s.charCodeAt(i); + return a < 0xd800 || a > 0xdbff || i + 1 === l || (b = s.charCodeAt(i + 1)) < 0xdc00 || b > 0xdfff + ? TO_STRING ? s.charAt(i) : a + : TO_STRING ? s.slice(i, i + 2) : (a - 0xd800 << 10) + (b - 0xdc00) + 0x10000; + }; + }; + +/***/ }), +/* 46 */ +/***/ (function(module, exports) { + + // 7.1.4 ToInteger + var ceil = Math.ceil + , floor = Math.floor; + module.exports = function(it){ + return isNaN(it = +it) ? 0 : (it > 0 ? floor : ceil)(it); + }; + +/***/ }), +/* 47 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + var LIBRARY = __webpack_require__(40) + , $export = __webpack_require__(19) + , redefine = __webpack_require__(23) + , hide = __webpack_require__(24) + , has = __webpack_require__(16) + , Iterators = __webpack_require__(48) + , $iterCreate = __webpack_require__(49) + , setToStringTag = __webpack_require__(27) + , getProto = __webpack_require__(8).getProto + , ITERATOR = __webpack_require__(28)('iterator') + , BUGGY = !([].keys && 'next' in [].keys()) // Safari has buggy iterators w/o `next` + , FF_ITERATOR = '@@iterator' + , KEYS = 'keys' + , VALUES = 'values'; + + var returnThis = function(){ return this; }; + + module.exports = function(Base, NAME, Constructor, next, DEFAULT, IS_SET, FORCED){ + $iterCreate(Constructor, NAME, next); + var getMethod = function(kind){ + if(!BUGGY && kind in proto)return proto[kind]; + switch(kind){ + case KEYS: return function keys(){ return new Constructor(this, kind); }; + case VALUES: return function values(){ return new Constructor(this, kind); }; + } return function entries(){ return new Constructor(this, kind); }; + }; + var TAG = NAME + ' Iterator' + , DEF_VALUES = DEFAULT == VALUES + , VALUES_BUG = false + , proto = Base.prototype + , $native = proto[ITERATOR] || proto[FF_ITERATOR] || DEFAULT && proto[DEFAULT] + , $default = $native || getMethod(DEFAULT) + , methods, key; + // Fix native + if($native){ + var IteratorPrototype = getProto($default.call(new Base)); + // Set @@toStringTag to native iterators + setToStringTag(IteratorPrototype, TAG, true); + // FF fix + if(!LIBRARY && has(proto, FF_ITERATOR))hide(IteratorPrototype, ITERATOR, returnThis); + // fix Array#{values, @@iterator}.name in V8 / FF + if(DEF_VALUES && $native.name !== VALUES){ + VALUES_BUG = true; + $default = function values(){ return $native.call(this); }; + } + } + // Define iterator + if((!LIBRARY || FORCED) && (BUGGY || VALUES_BUG || !proto[ITERATOR])){ + hide(proto, ITERATOR, $default); + } + // Plug for library + Iterators[NAME] = $default; + Iterators[TAG] = returnThis; + if(DEFAULT){ + methods = { + values: DEF_VALUES ? $default : getMethod(VALUES), + keys: IS_SET ? $default : getMethod(KEYS), + entries: !DEF_VALUES ? $default : getMethod('entries') + }; + if(FORCED)for(key in methods){ + if(!(key in proto))redefine(proto, key, methods[key]); + } else $export($export.P + $export.F * (BUGGY || VALUES_BUG), NAME, methods); + } + return methods; + }; + +/***/ }), +/* 48 */ +/***/ (function(module, exports) { + + module.exports = {}; + +/***/ }), +/* 49 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + var $ = __webpack_require__(8) + , descriptor = __webpack_require__(25) + , setToStringTag = __webpack_require__(27) + , IteratorPrototype = {}; + + // 25.1.2.1.1 %IteratorPrototype%[@@iterator]() + __webpack_require__(24)(IteratorPrototype, __webpack_require__(28)('iterator'), function(){ return this; }); + + module.exports = function(Constructor, NAME, next){ + Constructor.prototype = $.create(IteratorPrototype, {next: descriptor(1, next)}); + setToStringTag(Constructor, NAME + ' Iterator'); + }; + +/***/ }), +/* 50 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(51); + var Iterators = __webpack_require__(48); + Iterators.NodeList = Iterators.HTMLCollection = Iterators.Array; + +/***/ }), +/* 51 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + var addToUnscopables = __webpack_require__(52) + , step = __webpack_require__(53) + , Iterators = __webpack_require__(48) + , toIObject = __webpack_require__(31); + + // 22.1.3.4 Array.prototype.entries() + // 22.1.3.13 Array.prototype.keys() + // 22.1.3.29 Array.prototype.values() + // 22.1.3.30 Array.prototype[@@iterator]() + module.exports = __webpack_require__(47)(Array, 'Array', function(iterated, kind){ + this._t = toIObject(iterated); // target + this._i = 0; // next index + this._k = kind; // kind + // 22.1.5.2.1 %ArrayIteratorPrototype%.next() + }, function(){ + var O = this._t + , kind = this._k + , index = this._i++; + if(!O || index >= O.length){ + this._t = undefined; + return step(1); + } + if(kind == 'keys' )return step(0, index); + if(kind == 'values')return step(0, O[index]); + return step(0, [index, O[index]]); + }, 'values'); + + // argumentsList[@@iterator] is %ArrayProto_values% (9.4.4.6, 9.4.4.7) + Iterators.Arguments = Iterators.Array; + + addToUnscopables('keys'); + addToUnscopables('values'); + addToUnscopables('entries'); + +/***/ }), +/* 52 */ +/***/ (function(module, exports) { + + module.exports = function(){ /* empty */ }; + +/***/ }), +/* 53 */ +/***/ (function(module, exports) { + + module.exports = function(done, value){ + return {value: value, done: !!done}; + }; + +/***/ }), +/* 54 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(55), __esModule: true }; + +/***/ }), +/* 55 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(50); + __webpack_require__(44); + module.exports = __webpack_require__(56); + +/***/ }), +/* 56 */ +/***/ (function(module, exports, __webpack_require__) { + + var anObject = __webpack_require__(38) + , get = __webpack_require__(57); + module.exports = __webpack_require__(20).getIterator = function(it){ + var iterFn = get(it); + if(typeof iterFn != 'function')throw TypeError(it + ' is not iterable!'); + return anObject(iterFn.call(it)); + }; + +/***/ }), +/* 57 */ +/***/ (function(module, exports, __webpack_require__) { + + var classof = __webpack_require__(58) + , ITERATOR = __webpack_require__(28)('iterator') + , Iterators = __webpack_require__(48); + module.exports = __webpack_require__(20).getIteratorMethod = function(it){ + if(it != undefined)return it[ITERATOR] + || it['@@iterator'] + || Iterators[classof(it)]; + }; + +/***/ }), +/* 58 */ +/***/ (function(module, exports, __webpack_require__) { + + // getting tag from 19.1.3.6 Object.prototype.toString() + var cof = __webpack_require__(33) + , TAG = __webpack_require__(28)('toStringTag') + // ES3 wrong here + , ARG = cof(function(){ return arguments; }()) == 'Arguments'; + + module.exports = function(it){ + var O, T, B; + return it === undefined ? 'Undefined' : it === null ? 'Null' + // @@toStringTag case + : typeof (T = (O = Object(it))[TAG]) == 'string' ? T + // builtinTag case + : ARG ? cof(O) + // ES3 arguments fallback + : (B = cof(O)) == 'Object' && typeof O.callee == 'function' ? 'Arguments' : B; + }; + +/***/ }), +/* 59 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(60), __esModule: true }; + +/***/ }), +/* 60 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(61); + module.exports = __webpack_require__(20).Object.keys; + +/***/ }), +/* 61 */ +/***/ (function(module, exports, __webpack_require__) { + + // 19.1.2.14 Object.keys(O) + var toObject = __webpack_require__(62); + + __webpack_require__(63)('keys', function($keys){ + return function keys(it){ + return $keys(toObject(it)); + }; + }); + +/***/ }), +/* 62 */ +/***/ (function(module, exports, __webpack_require__) { + + // 7.1.13 ToObject(argument) + var defined = __webpack_require__(34); + module.exports = function(it){ + return Object(defined(it)); + }; + +/***/ }), +/* 63 */ +/***/ (function(module, exports, __webpack_require__) { + + // most Object methods by ES6 should accept primitives + var $export = __webpack_require__(19) + , core = __webpack_require__(20) + , fails = __webpack_require__(18); + module.exports = function(KEY, exec){ + var fn = (core.Object || {})[KEY] || Object[KEY] + , exp = {}; + exp[KEY] = exec(fn); + $export($export.S + $export.F * fails(function(){ fn(1); }), 'Object', exp); + }; + +/***/ }), +/* 64 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(2)['default']; + + exports.__esModule = true; + + var _exception = __webpack_require__(5); + + var _exception2 = _interopRequireDefault(_exception); + + exports['default'] = function (instance) { + instance.registerHelper('helperMissing', function () /* [args, ]options */{ + if (arguments.length === 1) { + // A missing field in a {{foo}} construct. + return undefined; + } else { + // Someone is actually trying to call something, blow up. + throw new _exception2['default']('Missing helper: "' + arguments[arguments.length - 1].name + '"'); + } + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 65 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(2)['default']; + + exports.__esModule = true; + + var _utils = __webpack_require__(4); + + var _exception = __webpack_require__(5); + + var _exception2 = _interopRequireDefault(_exception); + + exports['default'] = function (instance) { + instance.registerHelper('if', function (conditional, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#if requires exactly one argument'); + } + if (_utils.isFunction(conditional)) { + conditional = conditional.call(this); + } + + // Default behavior is to render the positive path if the value is truthy and not empty. + // The `includeZero` option may be set to treat the condtional as purely not empty based on the + // behavior of isEmpty. Effectively this determines if 0 is handled by the positive path or negative. + if (!options.hash.includeZero && !conditional || _utils.isEmpty(conditional)) { + return options.inverse(this); + } else { + return options.fn(this); + } + }); + + instance.registerHelper('unless', function (conditional, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#unless requires exactly one argument'); + } + return instance.helpers['if'].call(this, conditional, { + fn: options.inverse, + inverse: options.fn, + hash: options.hash + }); + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 66 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + + exports['default'] = function (instance) { + instance.registerHelper('log', function () /* message, options */{ + var args = [undefined], + options = arguments[arguments.length - 1]; + for (var i = 0; i < arguments.length - 1; i++) { + args.push(arguments[i]); + } + + var level = 1; + if (options.hash.level != null) { + level = options.hash.level; + } else if (options.data && options.data.level != null) { + level = options.data.level; + } + args[0] = level; + + instance.log.apply(instance, args); + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 67 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + + exports['default'] = function (instance) { + instance.registerHelper('lookup', function (obj, field, options) { + if (!obj) { + // Note for 5.0: Change to "obj == null" in 5.0 + return obj; + } + return options.lookupProperty(obj, field); + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 68 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(2)['default']; + + exports.__esModule = true; + + var _utils = __webpack_require__(4); + + var _exception = __webpack_require__(5); + + var _exception2 = _interopRequireDefault(_exception); + + exports['default'] = function (instance) { + instance.registerHelper('with', function (context, options) { + if (arguments.length != 2) { + throw new _exception2['default']('#with requires exactly one argument'); + } + if (_utils.isFunction(context)) { + context = context.call(this); + } + + var fn = options.fn; + + if (!_utils.isEmpty(context)) { + var data = options.data; + if (options.data && options.ids) { + data = _utils.createFrame(options.data); + data.contextPath = _utils.appendContextPath(options.data.contextPath, options.ids[0]); + } + + return fn(context, { + data: data, + blockParams: _utils.blockParams([context], [data && data.contextPath]) + }); + } else { + return options.inverse(this); + } + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 69 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _interopRequireDefault = __webpack_require__(2)['default']; + + exports.__esModule = true; + exports.registerDefaultDecorators = registerDefaultDecorators; + + var _decoratorsInline = __webpack_require__(70); + + var _decoratorsInline2 = _interopRequireDefault(_decoratorsInline); + + function registerDefaultDecorators(instance) { + _decoratorsInline2['default'](instance); + } + +/***/ }), +/* 70 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _utils = __webpack_require__(4); + + exports['default'] = function (instance) { + instance.registerDecorator('inline', function (fn, props, container, options) { + var ret = fn; + if (!props.partials) { + props.partials = {}; + ret = function (context, options) { + // Create a new partials stack frame prior to exec. + var original = container.partials; + container.partials = _utils.extend({}, original, props.partials); + var ret = fn(context, options); + container.partials = original; + return ret; + }; + } + + props.partials[options.args[0]] = options.fn; + + return ret; + }); + }; + + module.exports = exports['default']; + +/***/ }), +/* 71 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + exports.__esModule = true; + + var _utils = __webpack_require__(4); + + var logger = { + methodMap: ['debug', 'info', 'warn', 'error'], + level: 'info', + + // Maps a given level value to the `methodMap` indexes above. + lookupLevel: function lookupLevel(level) { + if (typeof level === 'string') { + var levelMap = _utils.indexOf(logger.methodMap, level.toLowerCase()); + if (levelMap >= 0) { + level = levelMap; + } else { + level = parseInt(level, 10); + } + } + + return level; + }, + + // Can be overridden in the host environment + log: function log(level) { + level = logger.lookupLevel(level); + + if (typeof console !== 'undefined' && logger.lookupLevel(logger.level) <= level) { + var method = logger.methodMap[level]; + // eslint-disable-next-line no-console + if (!console[method]) { + method = 'log'; + } + + for (var _len = arguments.length, message = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + message[_key - 1] = arguments[_key]; + } + + console[method].apply(console, message); // eslint-disable-line no-console + } + } + }; + + exports['default'] = logger; + module.exports = exports['default']; + +/***/ }), +/* 72 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Object$create = __webpack_require__(73)['default']; + + var _Object$keys = __webpack_require__(59)['default']; + + var _interopRequireDefault = __webpack_require__(2)['default']; + + exports.__esModule = true; + exports.createProtoAccessControl = createProtoAccessControl; + exports.resultIsAllowed = resultIsAllowed; + exports.resetLoggedProperties = resetLoggedProperties; + + var _createNewLookupObject = __webpack_require__(75); + + var _logger = __webpack_require__(71); + + var _logger2 = _interopRequireDefault(_logger); + + var loggedProperties = _Object$create(null); + + function createProtoAccessControl(runtimeOptions) { + var defaultMethodWhiteList = _Object$create(null); + defaultMethodWhiteList['constructor'] = false; + defaultMethodWhiteList['__defineGetter__'] = false; + defaultMethodWhiteList['__defineSetter__'] = false; + defaultMethodWhiteList['__lookupGetter__'] = false; + + var defaultPropertyWhiteList = _Object$create(null); + // eslint-disable-next-line no-proto + defaultPropertyWhiteList['__proto__'] = false; + + return { + properties: { + whitelist: _createNewLookupObject.createNewLookupObject(defaultPropertyWhiteList, runtimeOptions.allowedProtoProperties), + defaultValue: runtimeOptions.allowProtoPropertiesByDefault + }, + methods: { + whitelist: _createNewLookupObject.createNewLookupObject(defaultMethodWhiteList, runtimeOptions.allowedProtoMethods), + defaultValue: runtimeOptions.allowProtoMethodsByDefault + } + }; + } + + function resultIsAllowed(result, protoAccessControl, propertyName) { + if (typeof result === 'function') { + return checkWhiteList(protoAccessControl.methods, propertyName); + } else { + return checkWhiteList(protoAccessControl.properties, propertyName); + } + } + + function checkWhiteList(protoAccessControlForType, propertyName) { + if (protoAccessControlForType.whitelist[propertyName] !== undefined) { + return protoAccessControlForType.whitelist[propertyName] === true; + } + if (protoAccessControlForType.defaultValue !== undefined) { + return protoAccessControlForType.defaultValue; + } + logUnexpecedPropertyAccessOnce(propertyName); + return false; + } + + function logUnexpecedPropertyAccessOnce(propertyName) { + if (loggedProperties[propertyName] !== true) { + loggedProperties[propertyName] = true; + _logger2['default'].log('error', 'Handlebars: Access has been denied to resolve the property "' + propertyName + '" because it is not an "own property" of its parent.\n' + 'You can add a runtime option to disable the check or this warning:\n' + 'See https://handlebarsjs.com/api-reference/runtime-options.html#options-to-control-prototype-access for details'); + } + } + + function resetLoggedProperties() { + _Object$keys(loggedProperties).forEach(function (propertyName) { + delete loggedProperties[propertyName]; + }); + } + +/***/ }), +/* 73 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(74), __esModule: true }; + +/***/ }), +/* 74 */ +/***/ (function(module, exports, __webpack_require__) { + + var $ = __webpack_require__(8); + module.exports = function create(P, D){ + return $.create(P, D); + }; + +/***/ }), +/* 75 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Object$create = __webpack_require__(73)['default']; + + exports.__esModule = true; + exports.createNewLookupObject = createNewLookupObject; + + var _utils = __webpack_require__(4); + + /** + * Create a new object with "null"-prototype to avoid truthy results on prototype properties. + * The resulting object can be used with "object[property]" to check if a property exists + * @param {...object} sources a varargs parameter of source objects that will be merged + * @returns {object} + */ + + function createNewLookupObject() { + for (var _len = arguments.length, sources = Array(_len), _key = 0; _key < _len; _key++) { + sources[_key] = arguments[_key]; + } + + return _utils.extend.apply(undefined, [_Object$create(null)].concat(sources)); + } + +/***/ }), +/* 76 */ +/***/ (function(module, exports) { + + // Build out our basic SafeString type + 'use strict'; + + exports.__esModule = true; + function SafeString(string) { + this.string = string; + } + + SafeString.prototype.toString = SafeString.prototype.toHTML = function () { + return '' + this.string; + }; + + exports['default'] = SafeString; + module.exports = exports['default']; + +/***/ }), +/* 77 */ +/***/ (function(module, exports, __webpack_require__) { + + 'use strict'; + + var _Object$seal = __webpack_require__(78)['default']; + + var _Object$keys = __webpack_require__(59)['default']; + + var _interopRequireWildcard = __webpack_require__(1)['default']; + + var _interopRequireDefault = __webpack_require__(2)['default']; + + exports.__esModule = true; + exports.checkRevision = checkRevision; + exports.template = template; + exports.wrapProgram = wrapProgram; + exports.resolvePartial = resolvePartial; + exports.invokePartial = invokePartial; + exports.noop = noop; + + var _utils = __webpack_require__(4); + + var Utils = _interopRequireWildcard(_utils); + + var _exception = __webpack_require__(5); + + var _exception2 = _interopRequireDefault(_exception); + + var _base = __webpack_require__(3); + + var _helpers = __webpack_require__(9); + + var _internalWrapHelper = __webpack_require__(81); + + var _internalProtoAccess = __webpack_require__(72); + + function checkRevision(compilerInfo) { + var compilerRevision = compilerInfo && compilerInfo[0] || 1, + currentRevision = _base.COMPILER_REVISION; + + if (compilerRevision >= _base.LAST_COMPATIBLE_COMPILER_REVISION && compilerRevision <= _base.COMPILER_REVISION) { + return; + } + + if (compilerRevision < _base.LAST_COMPATIBLE_COMPILER_REVISION) { + var runtimeVersions = _base.REVISION_CHANGES[currentRevision], + compilerVersions = _base.REVISION_CHANGES[compilerRevision]; + throw new _exception2['default']('Template was precompiled with an older version of Handlebars than the current runtime. ' + 'Please update your precompiler to a newer version (' + runtimeVersions + ') or downgrade your runtime to an older version (' + compilerVersions + ').'); + } else { + // Use the embedded version info since the runtime doesn't know about this revision yet + throw new _exception2['default']('Template was precompiled with a newer version of Handlebars than the current runtime. ' + 'Please update your runtime to a newer version (' + compilerInfo[1] + ').'); + } + } + + function template(templateSpec, env) { + /* istanbul ignore next */ + if (!env) { + throw new _exception2['default']('No environment passed to template'); + } + if (!templateSpec || !templateSpec.main) { + throw new _exception2['default']('Unknown template object: ' + typeof templateSpec); + } + + templateSpec.main.decorator = templateSpec.main_d; + + // Note: Using env.VM references rather than local var references throughout this section to allow + // for external users to override these as pseudo-supported APIs. + env.VM.checkRevision(templateSpec.compiler); + + // backwards compatibility for precompiled templates with compiler-version 7 (<4.3.0) + var templateWasPrecompiledWithCompilerV7 = templateSpec.compiler && templateSpec.compiler[0] === 7; + + function invokePartialWrapper(partial, context, options) { + if (options.hash) { + context = Utils.extend({}, context, options.hash); + if (options.ids) { + options.ids[0] = true; + } + } + partial = env.VM.resolvePartial.call(this, partial, context, options); + + var extendedOptions = Utils.extend({}, options, { + hooks: this.hooks, + protoAccessControl: this.protoAccessControl + }); + + var result = env.VM.invokePartial.call(this, partial, context, extendedOptions); + + if (result == null && env.compile) { + options.partials[options.name] = env.compile(partial, templateSpec.compilerOptions, env); + result = options.partials[options.name](context, extendedOptions); + } + if (result != null) { + if (options.indent) { + var lines = result.split('\n'); + for (var i = 0, l = lines.length; i < l; i++) { + if (!lines[i] && i + 1 === l) { + break; + } + + lines[i] = options.indent + lines[i]; + } + result = lines.join('\n'); + } + return result; + } else { + throw new _exception2['default']('The partial ' + options.name + ' could not be compiled when running in runtime-only mode'); + } + } + + // Just add water + var container = { + strict: function strict(obj, name, loc) { + if (!obj || !(name in obj)) { + throw new _exception2['default']('"' + name + '" not defined in ' + obj, { + loc: loc + }); + } + return container.lookupProperty(obj, name); + }, + lookupProperty: function lookupProperty(parent, propertyName) { + var result = parent[propertyName]; + if (result == null) { + return result; + } + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return result; + } + + if (_internalProtoAccess.resultIsAllowed(result, container.protoAccessControl, propertyName)) { + return result; + } + return undefined; + }, + lookup: function lookup(depths, name) { + var len = depths.length; + for (var i = 0; i < len; i++) { + var result = depths[i] && container.lookupProperty(depths[i], name); + if (result != null) { + return depths[i][name]; + } + } + }, + lambda: function lambda(current, context) { + return typeof current === 'function' ? current.call(context) : current; + }, + + escapeExpression: Utils.escapeExpression, + invokePartial: invokePartialWrapper, + + fn: function fn(i) { + var ret = templateSpec[i]; + ret.decorator = templateSpec[i + '_d']; + return ret; + }, + + programs: [], + program: function program(i, data, declaredBlockParams, blockParams, depths) { + var programWrapper = this.programs[i], + fn = this.fn(i); + if (data || depths || blockParams || declaredBlockParams) { + programWrapper = wrapProgram(this, i, fn, data, declaredBlockParams, blockParams, depths); + } else if (!programWrapper) { + programWrapper = this.programs[i] = wrapProgram(this, i, fn); + } + return programWrapper; + }, + + data: function data(value, depth) { + while (value && depth--) { + value = value._parent; + } + return value; + }, + mergeIfNeeded: function mergeIfNeeded(param, common) { + var obj = param || common; + + if (param && common && param !== common) { + obj = Utils.extend({}, common, param); + } + + return obj; + }, + // An empty object to use as replacement for null-contexts + nullContext: _Object$seal({}), + + noop: env.VM.noop, + compilerInfo: templateSpec.compiler + }; + + function ret(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var data = options.data; + + ret._setup(options); + if (!options.partial && templateSpec.useData) { + data = initData(context, data); + } + var depths = undefined, + blockParams = templateSpec.useBlockParams ? [] : undefined; + if (templateSpec.useDepths) { + if (options.depths) { + depths = context != options.depths[0] ? [context].concat(options.depths) : options.depths; + } else { + depths = [context]; + } + } + + function main(context /*, options*/) { + return '' + templateSpec.main(container, context, container.helpers, container.partials, data, blockParams, depths); + } + + main = executeDecorators(templateSpec.main, main, container, options.depths || [], data, blockParams); + return main(context, options); + } + + ret.isTop = true; + + ret._setup = function (options) { + if (!options.partial) { + var mergedHelpers = Utils.extend({}, env.helpers, options.helpers); + wrapHelpersToPassLookupProperty(mergedHelpers, container); + container.helpers = mergedHelpers; + + if (templateSpec.usePartial) { + // Use mergeIfNeeded here to prevent compiling global partials multiple times + container.partials = container.mergeIfNeeded(options.partials, env.partials); + } + if (templateSpec.usePartial || templateSpec.useDecorators) { + container.decorators = Utils.extend({}, env.decorators, options.decorators); + } + + container.hooks = {}; + container.protoAccessControl = _internalProtoAccess.createProtoAccessControl(options); + + var keepHelperInHelpers = options.allowCallsToHelperMissing || templateWasPrecompiledWithCompilerV7; + _helpers.moveHelperToHooks(container, 'helperMissing', keepHelperInHelpers); + _helpers.moveHelperToHooks(container, 'blockHelperMissing', keepHelperInHelpers); + } else { + container.protoAccessControl = options.protoAccessControl; // internal option + container.helpers = options.helpers; + container.partials = options.partials; + container.decorators = options.decorators; + container.hooks = options.hooks; + } + }; + + ret._child = function (i, data, blockParams, depths) { + if (templateSpec.useBlockParams && !blockParams) { + throw new _exception2['default']('must pass block params'); + } + if (templateSpec.useDepths && !depths) { + throw new _exception2['default']('must pass parent depths'); + } + + return wrapProgram(container, i, templateSpec[i], data, 0, blockParams, depths); + }; + return ret; + } + + function wrapProgram(container, i, fn, data, declaredBlockParams, blockParams, depths) { + function prog(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + var currentDepths = depths; + if (depths && context != depths[0] && !(context === container.nullContext && depths[0] === null)) { + currentDepths = [context].concat(depths); + } + + return fn(container, context, container.helpers, container.partials, options.data || data, blockParams && [options.blockParams].concat(blockParams), currentDepths); + } + + prog = executeDecorators(fn, prog, container, depths, data, blockParams); + + prog.program = i; + prog.depth = depths ? depths.length : 0; + prog.blockParams = declaredBlockParams || 0; + return prog; + } + + /** + * This is currently part of the official API, therefore implementation details should not be changed. + */ + + function resolvePartial(partial, context, options) { + if (!partial) { + if (options.name === '@partial-block') { + partial = options.data['partial-block']; + } else { + partial = options.partials[options.name]; + } + } else if (!partial.call && !options.name) { + // This is a dynamic partial that returned a string + options.name = partial; + partial = options.partials[partial]; + } + return partial; + } + + function invokePartial(partial, context, options) { + // Use the current closure context to save the partial-block if this partial + var currentPartialBlock = options.data && options.data['partial-block']; + options.partial = true; + if (options.ids) { + options.data.contextPath = options.ids[0] || options.data.contextPath; + } + + var partialBlock = undefined; + if (options.fn && options.fn !== noop) { + (function () { + options.data = _base.createFrame(options.data); + // Wrapper function to get access to currentPartialBlock from the closure + var fn = options.fn; + partialBlock = options.data['partial-block'] = function partialBlockWrapper(context) { + var options = arguments.length <= 1 || arguments[1] === undefined ? {} : arguments[1]; + + // Restore the partial-block from the closure for the execution of the block + // i.e. the part inside the block of the partial call. + options.data = _base.createFrame(options.data); + options.data['partial-block'] = currentPartialBlock; + return fn(context, options); + }; + if (fn.partials) { + options.partials = Utils.extend({}, options.partials, fn.partials); + } + })(); + } + + if (partial === undefined && partialBlock) { + partial = partialBlock; + } + + if (partial === undefined) { + throw new _exception2['default']('The partial ' + options.name + ' could not be found'); + } else if (partial instanceof Function) { + return partial(context, options); + } + } + + function noop() { + return ''; + } + + function initData(context, data) { + if (!data || !('root' in data)) { + data = data ? _base.createFrame(data) : {}; + data.root = context; + } + return data; + } + + function executeDecorators(fn, prog, container, depths, data, blockParams) { + if (fn.decorator) { + var props = {}; + prog = fn.decorator(prog, props, container, depths && depths[0], data, blockParams, depths); + Utils.extend(prog, props); + } + return prog; + } + + function wrapHelpersToPassLookupProperty(mergedHelpers, container) { + _Object$keys(mergedHelpers).forEach(function (helperName) { + var helper = mergedHelpers[helperName]; + mergedHelpers[helperName] = passLookupPropertyOption(helper, container); + }); + } + + function passLookupPropertyOption(helper, container) { + var lookupProperty = container.lookupProperty; + return _internalWrapHelper.wrapHelper(helper, function (options) { + return Utils.extend({ lookupProperty: lookupProperty }, options); + }); + } + +/***/ }), +/* 78 */ +/***/ (function(module, exports, __webpack_require__) { + + module.exports = { "default": __webpack_require__(79), __esModule: true }; + +/***/ }), +/* 79 */ +/***/ (function(module, exports, __webpack_require__) { + + __webpack_require__(80); + module.exports = __webpack_require__(20).Object.seal; + +/***/ }), +/* 80 */ +/***/ (function(module, exports, __webpack_require__) { + + // 19.1.2.17 Object.seal(O) + var isObject = __webpack_require__(39); + + __webpack_require__(63)('seal', function($seal){ + return function seal(it){ + return $seal && isObject(it) ? $seal(it) : it; + }; + }); + +/***/ }), +/* 81 */ +/***/ (function(module, exports) { + + 'use strict'; + + exports.__esModule = true; + exports.wrapHelper = wrapHelper; + + function wrapHelper(helper, transformOptionsFn) { + if (typeof helper !== 'function') { + // This should not happen, but apparently it does in https://github.com/wycats/handlebars.js/issues/1639 + // We try to make the wrapper least-invasive by not wrapping it, if the helper is not a function. + return helper; + } + var wrapper = function wrapper() /* dynamic arguments */{ + var options = arguments[arguments.length - 1]; + arguments[arguments.length - 1] = transformOptionsFn(options); + return helper.apply(this, arguments); + }; + return wrapper; + } + +/***/ }), +/* 82 */ +/***/ (function(module, exports) { + + /* global globalThis */ + 'use strict'; + + exports.__esModule = true; + + exports['default'] = function (Handlebars) { + /* istanbul ignore next */ + // https://mathiasbynens.be/notes/globalthis + (function () { + if (typeof globalThis === 'object') return; + Object.prototype.__defineGetter__('__magic__', function () { + return this; + }); + __magic__.globalThis = __magic__; // eslint-disable-line no-undef + delete Object.prototype.__magic__; + })(); + + var $Handlebars = globalThis.Handlebars; + + /* istanbul ignore next */ + Handlebars.noConflict = function () { + if (globalThis.Handlebars === Handlebars) { + globalThis.Handlebars = $Handlebars; + } + return Handlebars; + }; + }; + + module.exports = exports['default']; + +/***/ }) +/******/ ]) +}); +; \ No newline at end of file diff --git a/assets/static/js/htmx/ext/ajax-header.js b/assets/static/js/htmx/ext/ajax-header.js new file mode 100644 index 0000000..5c6221b --- /dev/null +++ b/assets/static/js/htmx/ext/ajax-header.js @@ -0,0 +1,7 @@ +htmx.defineExtension('ajax-header', { + onEvent: function (name, evt) { + if (name === "htmx:configRequest") { + evt.detail.headers['X-Requested-With'] = 'XMLHttpRequest'; + } + } +}); \ No newline at end of file diff --git a/assets/static/js/htmx/ext/alpine-morph.js b/assets/static/js/htmx/ext/alpine-morph.js new file mode 100644 index 0000000..1872dae --- /dev/null +++ b/assets/static/js/htmx/ext/alpine-morph.js @@ -0,0 +1,16 @@ +htmx.defineExtension('alpine-morph', { + isInlineSwap: function (swapStyle) { + return swapStyle === 'morph'; + }, + handleSwap: function (swapStyle, target, fragment) { + if (swapStyle === 'morph') { + if (fragment.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { + Alpine.morph(target, fragment.firstElementChild); + return [target]; + } else { + Alpine.morph(target, fragment.outerHTML); + return [target]; + } + } + } +}); \ No newline at end of file diff --git a/assets/static/js/htmx/ext/class-tools.js b/assets/static/js/htmx/ext/class-tools.js new file mode 100644 index 0000000..1cf4b42 --- /dev/null +++ b/assets/static/js/htmx/ext/class-tools.js @@ -0,0 +1,92 @@ +(function () { + + function splitOnWhitespace(trigger) { + return trigger.split(/\s+/); + } + + function parseClassOperation(trimmedValue) { + var split = splitOnWhitespace(trimmedValue); + if (split.length > 1) { + var operation = split[0]; + var classDef = split[1].trim(); + var cssClass; + var delay; + if (classDef.indexOf(":") > 0) { + var splitCssClass = classDef.split(':'); + cssClass = splitCssClass[0]; + delay = htmx.parseInterval(splitCssClass[1]); + } else { + cssClass = classDef; + delay = 100; + } + return { + operation: operation, + cssClass: cssClass, + delay: delay + } + } else { + return null; + } + } + + function performOperation(elt, classOperation, classList, currentRunTime) { + setTimeout(function () { + elt.classList[classOperation.operation].call(elt.classList, classOperation.cssClass); + }, currentRunTime) + } + + function toggleOperation(elt, classOperation, classList, currentRunTime) { + setTimeout(function () { + setInterval(function () { + elt.classList[classOperation.operation].call(elt.classList, classOperation.cssClass); + }, classOperation.delay); + }, currentRunTime) + } + + function processClassList(elt, classList) { + var runs = classList.split("&"); + for (var i = 0; i < runs.length; i++) { + var run = runs[i]; + var currentRunTime = 0; + var classOperations = run.split(","); + for (var j = 0; j < classOperations.length; j++) { + var value = classOperations[j]; + var trimmedValue = value.trim(); + var classOperation = parseClassOperation(trimmedValue); + if (classOperation) { + if (classOperation.operation === "toggle") { + toggleOperation(elt, classOperation, classList, currentRunTime); + currentRunTime = currentRunTime + classOperation.delay; + } else { + currentRunTime = currentRunTime + classOperation.delay; + performOperation(elt, classOperation, classList, currentRunTime); + } + } + } + } + } + + function maybeProcessClasses(elt) { + if (elt.getAttribute) { + var classList = elt.getAttribute("classes") || elt.getAttribute("data-classes"); + if (classList) { + processClassList(elt, classList); + } + } + } + + htmx.defineExtension('class-tools', { + onEvent: function (name, evt) { + if (name === "htmx:afterProcessNode") { + var elt = evt.detail.elt; + maybeProcessClasses(elt); + if (elt.querySelectorAll) { + var children = elt.querySelectorAll("[classes], [data-classes]"); + for (var i = 0; i < children.length; i++) { + maybeProcessClasses(children[i]); + } + } + } + } + }); +})(); \ No newline at end of file diff --git a/assets/static/js/htmx/ext/client-side-templates.js b/assets/static/js/htmx/ext/client-side-templates.js new file mode 100644 index 0000000..2bace41 --- /dev/null +++ b/assets/static/js/htmx/ext/client-side-templates.js @@ -0,0 +1,96 @@ +htmx.defineExtension('client-side-templates', { + transformResponse : function(text, xhr, elt) { + + var mustacheTemplate = htmx.closest(elt, "[mustache-template]"); + if (mustacheTemplate) { + var data = JSON.parse(text); + var templateId = mustacheTemplate.getAttribute('mustache-template'); + var template = htmx.find("#" + templateId); + if (template) { + return Mustache.render(template.innerHTML, data); + } else { + throw "Unknown mustache template: " + templateId; + } + } + + var mustacheArrayTemplate = htmx.closest(elt, "[mustache-array-template]"); + if (mustacheArrayTemplate) { + var data = JSON.parse(text); + var templateId = mustacheArrayTemplate.getAttribute('mustache-array-template'); + var template = htmx.find("#" + templateId); + if (template) { + return Mustache.render(template.innerHTML, {"data": data }); + } else { + throw "Unknown mustache template: " + templateId; + } + } + + var handlebarsTemplate = htmx.closest(elt, "[handlebars-template]"); + if (handlebarsTemplate) { + var data = JSON.parse(text); + var templateId = handlebarsTemplate.getAttribute('handlebars-template'); + var templateElement = htmx.find('#' + templateId).innerHTML; + var renderTemplate = Handlebars.compile(templateElement); + if (renderTemplate) { + return renderTemplate(data); + } else { + throw "Unknown handlebars template: " + templateId; + } + } + + var handlebarsArrayTemplate = htmx.closest(elt, "[handlebars-array-template]"); + if (handlebarsArrayTemplate) { + var data = JSON.parse(text); + var templateId = handlebarsArrayTemplate.getAttribute('handlebars-array-template'); + var templateElement = htmx.find('#' + templateId).innerHTML; + var renderTemplate = Handlebars.compile(templateElement); + if (renderTemplate) { + return renderTemplate(data); + } else { + throw "Unknown handlebars template: " + templateId; + } + } + + var nunjucksTemplate = htmx.closest(elt, "[nunjucks-template]"); + if (nunjucksTemplate) { + var data = JSON.parse(text); + var templateName = nunjucksTemplate.getAttribute('nunjucks-template'); + var template = htmx.find('#' + templateName); + if (template) { + return nunjucks.renderString(template.innerHTML, data); + } else { + return nunjucks.render(templateName, data); + } + } + + var xsltTemplate = htmx.closest(elt, "[xslt-template]"); + if (xsltTemplate) { + var templateId = xsltTemplate.getAttribute('xslt-template'); + var template = htmx.find("#" + templateId); + if (template) { + var content = template.innerHTML ? new DOMParser().parseFromString(template.innerHTML, 'application/xml') + : template.contentDocument; + var processor = new XSLTProcessor(); + processor.importStylesheet(content); + var data = new DOMParser().parseFromString(text, "application/xml"); + var frag = processor.transformToFragment(data, document); + return new XMLSerializer().serializeToString(frag); + } else { + throw "Unknown XSLT template: " + templateId; + } + } + + var nunjucksArrayTemplate = htmx.closest(elt, "[nunjucks-array-template]"); + if (nunjucksArrayTemplate) { + var data = JSON.parse(text); + var templateName = nunjucksArrayTemplate.getAttribute('nunjucks-array-template'); + var template = htmx.find('#' + templateName); + if (template) { + return nunjucks.renderString(template.innerHTML, {"data": data}); + } else { + return nunjucks.render(templateName, {"data": data}); + } + } + return text; + } +}); diff --git a/assets/static/js/htmx/ext/debug.js b/assets/static/js/htmx/ext/debug.js new file mode 100644 index 0000000..861ee74 --- /dev/null +++ b/assets/static/js/htmx/ext/debug.js @@ -0,0 +1,11 @@ +htmx.defineExtension('debug', { + onEvent: function (name, evt) { + if (console.debug) { + console.debug(name, evt); + } else if (console) { + console.log("DEBUG:", name, evt); + } else { + throw "NO CONSOLE SUPPORTED" + } + } +}); diff --git a/assets/static/js/htmx/ext/disable-element.js b/assets/static/js/htmx/ext/disable-element.js new file mode 100644 index 0000000..07bef62 --- /dev/null +++ b/assets/static/js/htmx/ext/disable-element.js @@ -0,0 +1,18 @@ +"use strict"; + +// Disable Submit Button +htmx.defineExtension('disable-element', { + onEvent: function (name, evt) { + let elt = evt.detail.elt; + let target = elt.getAttribute("hx-disable-element"); + let targetElements = (target == "self") ? [ elt ] : document.querySelectorAll(target); + + for (var i = 0; i < targetElements.length; i++) { + if (name === "htmx:beforeRequest" && targetElements[i]) { + targetElements[i].disabled = true; + } else if (name == "htmx:afterRequest" && targetElements[i]) { + targetElements[i].disabled = false; + } + } + } +}); \ No newline at end of file diff --git a/assets/static/js/htmx/ext/event-header.js b/assets/static/js/htmx/ext/event-header.js new file mode 100644 index 0000000..c7d2933 --- /dev/null +++ b/assets/static/js/htmx/ext/event-header.js @@ -0,0 +1,37 @@ +(function(){ + function stringifyEvent(event) { + var obj = {}; + for (var key in event) { + obj[key] = event[key]; + } + return JSON.stringify(obj, function(key, value){ + if(value instanceof Node){ + var nodeRep = value.tagName; + if (nodeRep) { + nodeRep = nodeRep.toLowerCase(); + if(value.id){ + nodeRep += "#" + value.id; + } + if(value.classList && value.classList.length){ + nodeRep += "." + value.classList.toString().replace(" ", ".") + } + return nodeRep; + } else { + return "Node" + } + } + if (value instanceof Window) return 'Window'; + return value; + }); + } + + htmx.defineExtension('event-header', { + onEvent: function (name, evt) { + if (name === "htmx:configRequest") { + if (evt.detail.triggeringEvent) { + evt.detail.headers['Triggering-Event'] = stringifyEvent(evt.detail.triggeringEvent); + } + } + } + }); +})(); diff --git a/assets/static/js/htmx/ext/head-support.js b/assets/static/js/htmx/ext/head-support.js new file mode 100644 index 0000000..67cfc69 --- /dev/null +++ b/assets/static/js/htmx/ext/head-support.js @@ -0,0 +1,141 @@ +//========================================================== +// head-support.js +// +// An extension to htmx 1.0 to add head tag merging. +//========================================================== +(function(){ + + var api = null; + + function log() { + //console.log(arguments); + } + + function mergeHead(newContent, defaultMergeStrategy) { + + if (newContent && newContent.indexOf(' -1) { + const htmlDoc = document.createElement("html"); + // remove svgs to avoid conflicts + var contentWithSvgsRemoved = newContent.replace(/]*>|>)([\s\S]*?)<\/svg>/gim, ''); + // extract head tag + var headTag = contentWithSvgsRemoved.match(/(]*>|>)([\s\S]*?)<\/head>)/im); + + // if the head tag exists... + if (headTag) { + + var added = [] + var removed = [] + var preserved = [] + var nodesToAppend = [] + + htmlDoc.innerHTML = headTag; + var newHeadTag = htmlDoc.querySelector("head"); + var currentHead = document.head; + + if (newHeadTag == null) { + return; + } else { + // put all new head elements into a Map, by their outerHTML + var srcToNewHeadNodes = new Map(); + for (const newHeadChild of newHeadTag.children) { + srcToNewHeadNodes.set(newHeadChild.outerHTML, newHeadChild); + } + } + + + + // determine merge strategy + var mergeStrategy = api.getAttributeValue(newHeadTag, "hx-head") || defaultMergeStrategy; + + // get the current head + for (const currentHeadElt of currentHead.children) { + + // If the current head element is in the map + var inNewContent = srcToNewHeadNodes.has(currentHeadElt.outerHTML); + var isReAppended = currentHeadElt.getAttribute("hx-head") === "re-eval"; + var isPreserved = api.getAttributeValue(currentHeadElt, "hx-preserve") === "true"; + if (inNewContent || isPreserved) { + if (isReAppended) { + // remove the current version and let the new version replace it and re-execute + removed.push(currentHeadElt); + } else { + // this element already exists and should not be re-appended, so remove it from + // the new content map, preserving it in the DOM + srcToNewHeadNodes.delete(currentHeadElt.outerHTML); + preserved.push(currentHeadElt); + } + } else { + if (mergeStrategy === "append") { + // we are appending and this existing element is not new content + // so if and only if it is marked for re-append do we do anything + if (isReAppended) { + removed.push(currentHeadElt); + nodesToAppend.push(currentHeadElt); + } + } else { + // if this is a merge, we remove this content since it is not in the new head + if (api.triggerEvent(document.body, "htmx:removingHeadElement", {headElement: currentHeadElt}) !== false) { + removed.push(currentHeadElt); + } + } + } + } + + // Push the tremaining new head elements in the Map into the + // nodes to append to the head tag + nodesToAppend.push(...srcToNewHeadNodes.values()); + log("to append: ", nodesToAppend); + + for (const newNode of nodesToAppend) { + log("adding: ", newNode); + var newElt = document.createRange().createContextualFragment(newNode.outerHTML); + log(newElt); + if (api.triggerEvent(document.body, "htmx:addingHeadElement", {headElement: newElt}) !== false) { + currentHead.appendChild(newElt); + added.push(newElt); + } + } + + // remove all removed elements, after we have appended the new elements to avoid + // additional network requests for things like style sheets + for (const removedElement of removed) { + if (api.triggerEvent(document.body, "htmx:removingHeadElement", {headElement: removedElement}) !== false) { + currentHead.removeChild(removedElement); + } + } + + api.triggerEvent(document.body, "htmx:afterHeadMerge", {added: added, kept: preserved, removed: removed}); + } + } + } + + htmx.defineExtension("head-support", { + init: function(apiRef) { + // store a reference to the internal API. + api = apiRef; + + htmx.on('htmx:afterSwap', function(evt){ + var serverResponse = evt.detail.xhr.response; + if (api.triggerEvent(document.body, "htmx:beforeHeadMerge", evt.detail)) { + mergeHead(serverResponse, evt.detail.boosted ? "merge" : "append"); + } + }) + + htmx.on('htmx:historyRestore', function(evt){ + if (api.triggerEvent(document.body, "htmx:beforeHeadMerge", evt.detail)) { + if (evt.detail.cacheMiss) { + mergeHead(evt.detail.serverResponse, "merge"); + } else { + mergeHead(evt.detail.item.head, "merge"); + } + } + }) + + htmx.on('htmx:historyItemCreated', function(evt){ + var historyItem = evt.detail.item; + historyItem.head = document.head.outerHTML; + }) + } + }); + +})() \ No newline at end of file diff --git a/assets/static/js/htmx/ext/htmx-shoelace.js b/assets/static/js/htmx/ext/htmx-shoelace.js new file mode 100644 index 0000000..4d79c75 --- /dev/null +++ b/assets/static/js/htmx/ext/htmx-shoelace.js @@ -0,0 +1,45 @@ +const slTypes = 'sl-checkbox, sl-color-picker, sl-input, sl-radio-group, sl-range, sl-rating, sl-select, sl-switch, sl-textarea' + +/* Lightly modified version of the same function in htmx.js */ +function shouldInclude(elt) { + + // sl-rating doesn't have a name attribute exposed through the Shoelace API (for elt.name) so this check needs to come before the name==="" check + if (elt.tagName === 'SL-RATING' && elt.getAttribute('name')) { + return true + } + + if (elt.name === "" || elt.name == null || elt.disabled || elt.closest("fieldset[disabled]")) { + return false + } + + if (elt.tagName === 'SL-CHECKBOX' || elt.tagName === 'SL-SWITCH') { + return elt.checked + } + + if (elt.tagName === "SL-RADIO-GROUP") { + return elt.value.length > 0 + } + + return true; +} + +htmx.defineExtension('shoelace', { + onEvent : function(name, evt) { + if ((name === "htmx:configRequest") && (evt.detail.elt.tagName === 'FORM')) { + evt.detail.elt.querySelectorAll(slTypes).forEach((elt) => { + if (shouldInclude(elt)) { + if (elt.tagName === 'SL-CHECKBOX' || elt.tagName === 'SL-SWITCH') { + // Shoelace normally does this bit internally when the formdata event fires, but htmx doesn't fire the formdata event, so we do it here instead. See https://github.com/shoelace-style/shoelace/issues/1891 + evt.detail.parameters[elt.name] = elt.value || 'on' + + } else if (elt.tagName == 'SL-RATING') { + evt.detail.parameters[elt.getAttribute('name')] = elt.value + + } else { + evt.detail.parameters[elt.name] = elt.value + } + } + }) + } + } +}) \ No newline at end of file diff --git a/assets/static/js/htmx/ext/include-vals.js b/assets/static/js/htmx/ext/include-vals.js new file mode 100644 index 0000000..d8f5ce4 --- /dev/null +++ b/assets/static/js/htmx/ext/include-vals.js @@ -0,0 +1,24 @@ +(function(){ + + function mergeObjects(obj1, obj2) { + for (var key in obj2) { + if (obj2.hasOwnProperty(key)) { + obj1[key] = obj2[key]; + } + } + return obj1; + } + + htmx.defineExtension('include-vals', { + onEvent: function (name, evt) { + if (name === "htmx:configRequest") { + var includeValsElt = htmx.closest(evt.detail.elt, "[include-vals],[data-include-vals]"); + if (includeValsElt) { + var includeVals = includeValsElt.getAttribute("include-vals") || includeValsElt.getAttribute("data-include-vals"); + var valuesToInclude = eval("({" + includeVals + "})"); + mergeObjects(evt.detail.parameters, valuesToInclude); + } + } + } + }); +})(); diff --git a/assets/static/js/htmx/ext/json-enc.js b/assets/static/js/htmx/ext/json-enc.js new file mode 100644 index 0000000..db0aa36 --- /dev/null +++ b/assets/static/js/htmx/ext/json-enc.js @@ -0,0 +1,12 @@ +htmx.defineExtension('json-enc', { + onEvent: function (name, evt) { + if (name === "htmx:configRequest") { + evt.detail.headers['Content-Type'] = "application/json"; + } + }, + + encodeParameters : function(xhr, parameters, elt) { + xhr.overrideMimeType('text/json'); + return (JSON.stringify(parameters)); + } +}); \ No newline at end of file diff --git a/assets/static/js/htmx/ext/loading-states.js b/assets/static/js/htmx/ext/loading-states.js new file mode 100644 index 0000000..c8ab51d --- /dev/null +++ b/assets/static/js/htmx/ext/loading-states.js @@ -0,0 +1,183 @@ +;(function () { + let loadingStatesUndoQueue = [] + + function loadingStateContainer(target) { + return htmx.closest(target, '[data-loading-states]') || document.body + } + + function mayProcessUndoCallback(target, callback) { + if (document.body.contains(target)) { + callback() + } + } + + function mayProcessLoadingStateByPath(elt, requestPath) { + const pathElt = htmx.closest(elt, '[data-loading-path]') + if (!pathElt) { + return true + } + + return pathElt.getAttribute('data-loading-path') === requestPath + } + + function queueLoadingState(sourceElt, targetElt, doCallback, undoCallback) { + const delayElt = htmx.closest(sourceElt, '[data-loading-delay]') + if (delayElt) { + const delayInMilliseconds = + delayElt.getAttribute('data-loading-delay') || 200 + const timeout = setTimeout(function () { + doCallback() + + loadingStatesUndoQueue.push(function () { + mayProcessUndoCallback(targetElt, undoCallback) + }) + }, delayInMilliseconds) + + loadingStatesUndoQueue.push(function () { + mayProcessUndoCallback(targetElt, function () { clearTimeout(timeout) }) + }) + } else { + doCallback() + loadingStatesUndoQueue.push(function () { + mayProcessUndoCallback(targetElt, undoCallback) + }) + } + } + + function getLoadingStateElts(loadingScope, type, path) { + return Array.from(htmx.findAll(loadingScope, "[" + type + "]")).filter( + function (elt) { return mayProcessLoadingStateByPath(elt, path) } + ) + } + + function getLoadingTarget(elt) { + if (elt.getAttribute('data-loading-target')) { + return Array.from( + htmx.findAll(elt.getAttribute('data-loading-target')) + ) + } + return [elt] + } + + htmx.defineExtension('loading-states', { + onEvent: function (name, evt) { + if (name === 'htmx:beforeRequest') { + const container = loadingStateContainer(evt.target) + + const loadingStateTypes = [ + 'data-loading', + 'data-loading-class', + 'data-loading-class-remove', + 'data-loading-disable', + 'data-loading-aria-busy', + ] + + let loadingStateEltsByType = {} + + loadingStateTypes.forEach(function (type) { + loadingStateEltsByType[type] = getLoadingStateElts( + container, + type, + evt.detail.pathInfo.requestPath + ) + }) + + loadingStateEltsByType['data-loading'].forEach(function (sourceElt) { + getLoadingTarget(sourceElt).forEach(function (targetElt) { + queueLoadingState( + sourceElt, + targetElt, + function () { + targetElt.style.display = + sourceElt.getAttribute('data-loading') || + 'inline-block' }, + function () { targetElt.style.display = 'none' } + ) + }) + }) + + loadingStateEltsByType['data-loading-class'].forEach( + function (sourceElt) { + const classNames = sourceElt + .getAttribute('data-loading-class') + .split(' ') + + getLoadingTarget(sourceElt).forEach(function (targetElt) { + queueLoadingState( + sourceElt, + targetElt, + function () { + classNames.forEach(function (className) { + targetElt.classList.add(className) + }) + }, + function() { + classNames.forEach(function (className) { + targetElt.classList.remove(className) + }) + } + ) + }) + } + ) + + loadingStateEltsByType['data-loading-class-remove'].forEach( + function (sourceElt) { + const classNames = sourceElt + .getAttribute('data-loading-class-remove') + .split(' ') + + getLoadingTarget(sourceElt).forEach(function (targetElt) { + queueLoadingState( + sourceElt, + targetElt, + function () { + classNames.forEach(function (className) { + targetElt.classList.remove(className) + }) + }, + function() { + classNames.forEach(function (className) { + targetElt.classList.add(className) + }) + } + ) + }) + } + ) + + loadingStateEltsByType['data-loading-disable'].forEach( + function (sourceElt) { + getLoadingTarget(sourceElt).forEach(function (targetElt) { + queueLoadingState( + sourceElt, + targetElt, + function() { targetElt.disabled = true }, + function() { targetElt.disabled = false } + ) + }) + } + ) + + loadingStateEltsByType['data-loading-aria-busy'].forEach( + function (sourceElt) { + getLoadingTarget(sourceElt).forEach(function (targetElt) { + queueLoadingState( + sourceElt, + targetElt, + function () { targetElt.setAttribute("aria-busy", "true") }, + function () { targetElt.removeAttribute("aria-busy") } + ) + }) + } + ) + } + + if (name === 'htmx:beforeOnLoad') { + while (loadingStatesUndoQueue.length > 0) { + loadingStatesUndoQueue.shift()() + } + } + }, + }) +})() diff --git a/assets/static/js/htmx/ext/method-override.js b/assets/static/js/htmx/ext/method-override.js new file mode 100644 index 0000000..2e3504c --- /dev/null +++ b/assets/static/js/htmx/ext/method-override.js @@ -0,0 +1,11 @@ +htmx.defineExtension('method-override', { + onEvent: function (name, evt) { + if (name === "htmx:configRequest") { + var method = evt.detail.verb; + if (method !== "get" || method !== "post") { + evt.detail.headers['X-HTTP-Method-Override'] = method.toUpperCase(); + evt.detail.verb = "post"; + } + } + } +}); diff --git a/assets/static/js/htmx/ext/morphdom-swap.js b/assets/static/js/htmx/ext/morphdom-swap.js new file mode 100644 index 0000000..a1e53ce --- /dev/null +++ b/assets/static/js/htmx/ext/morphdom-swap.js @@ -0,0 +1,17 @@ +htmx.defineExtension('morphdom-swap', { + isInlineSwap: function(swapStyle) { + return swapStyle === 'morphdom'; + }, + handleSwap: function (swapStyle, target, fragment) { + if (swapStyle === 'morphdom') { + if (fragment.nodeType === Node.DOCUMENT_FRAGMENT_NODE) { + // IE11 doesn't support DocumentFragment.firstElementChild + morphdom(target, fragment.firstElementChild || fragment.firstChild); + return [target]; + } else { + morphdom(target, fragment.outerHTML); + return [target]; + } + } + } +}); diff --git a/assets/static/js/htmx/ext/multi-swap.js b/assets/static/js/htmx/ext/multi-swap.js new file mode 100644 index 0000000..f38f5b0 --- /dev/null +++ b/assets/static/js/htmx/ext/multi-swap.js @@ -0,0 +1,45 @@ +(function () { + + /** @type {import("../htmx").HtmxInternalApi} */ + var api; + + htmx.defineExtension('multi-swap', { + init: function (apiRef) { + api = apiRef; + }, + isInlineSwap: function (swapStyle) { + return swapStyle.indexOf('multi:') === 0; + }, + handleSwap: function (swapStyle, target, fragment, settleInfo) { + if (swapStyle.indexOf('multi:') === 0) { + var selectorToSwapStyle = {}; + var elements = swapStyle.replace(/^multi\s*:\s*/, '').split(/\s*,\s*/); + + elements.map(function (element) { + var split = element.split(/\s*:\s*/); + var elementSelector = split[0]; + var elementSwapStyle = typeof (split[1]) !== "undefined" ? split[1] : "innerHTML"; + + if (elementSelector.charAt(0) !== '#') { + console.error("HTMX multi-swap: unsupported selector '" + elementSelector + "'. Only ID selectors starting with '#' are supported."); + return; + } + + selectorToSwapStyle[elementSelector] = elementSwapStyle; + }); + + for (var selector in selectorToSwapStyle) { + var swapStyle = selectorToSwapStyle[selector]; + var elementToSwap = fragment.querySelector(selector); + if (elementToSwap) { + api.oobSwap(swapStyle, elementToSwap, settleInfo); + } else { + console.warn("HTMX multi-swap: selector '" + selector + "' not found in source content."); + } + } + + return true; + } + } + }); +})(); \ No newline at end of file diff --git a/assets/static/js/htmx/ext/path-deps.js b/assets/static/js/htmx/ext/path-deps.js new file mode 100644 index 0000000..4987e50 --- /dev/null +++ b/assets/static/js/htmx/ext/path-deps.js @@ -0,0 +1,60 @@ +(function(undefined){ + 'use strict'; + + // Save a reference to the global object (window in the browser) + var _root = this; + + function dependsOn(pathSpec, url) { + if (pathSpec === "ignore") { + return false; + } + var dependencyPath = pathSpec.split("/"); + var urlPath = url.split("/"); + for (var i = 0; i < urlPath.length; i++) { + var dependencyElement = dependencyPath.shift(); + var pathElement = urlPath[i]; + if (dependencyElement !== pathElement && dependencyElement !== "*") { + return false; + } + if (dependencyPath.length === 0 || (dependencyPath.length === 1 && dependencyPath[0] === "")) { + return true; + } + } + return false; + } + + function refreshPath(path) { + var eltsWithDeps = htmx.findAll("[path-deps]"); + for (var i = 0; i < eltsWithDeps.length; i++) { + var elt = eltsWithDeps[i]; + if (dependsOn(elt.getAttribute('path-deps'), path)) { + htmx.trigger(elt, "path-deps"); + } + } + } + + htmx.defineExtension('path-deps', { + onEvent: function (name, evt) { + if (name === "htmx:beforeOnLoad") { + var config = evt.detail.requestConfig; + // mutating call + if (config.verb !== "get" && evt.target.getAttribute('path-deps') !== 'ignore') { + refreshPath(config.path); + } + } + } + }); + + /** + * ******************** + * Expose functionality + * ******************** + */ + + _root.PathDeps = { + refresh: function(path) { + refreshPath(path); + } + }; + +}).call(this); diff --git a/assets/static/js/htmx/ext/preload.js b/assets/static/js/htmx/ext/preload.js new file mode 100644 index 0000000..a749370 --- /dev/null +++ b/assets/static/js/htmx/ext/preload.js @@ -0,0 +1,147 @@ +// This adds the "preload" extension to htmx. By default, this will +// preload the targets of any tags with `href` or `hx-get` attributes +// if they also have a `preload` attribute as well. See documentation +// for more details +htmx.defineExtension("preload", { + + onEvent: function(name, event) { + + // Only take actions on "htmx:afterProcessNode" + if (name !== "htmx:afterProcessNode") { + return; + } + + // SOME HELPER FUNCTIONS WE'LL NEED ALONG THE WAY + + // attr gets the closest non-empty value from the attribute. + var attr = function(node, property) { + if (node == undefined) {return undefined;} + return node.getAttribute(property) || node.getAttribute("data-" + property) || attr(node.parentElement, property) + } + + // load handles the actual HTTP fetch, and uses htmx.ajax in cases where we're + // preloading an htmx resource (this sends the same HTTP headers as a regular htmx request) + var load = function(node) { + + // Called after a successful AJAX request, to mark the + // content as loaded (and prevent additional AJAX calls.) + var done = function(html) { + if (!node.preloadAlways) { + node.preloadState = "DONE" + } + + if (attr(node, "preload-images") == "true") { + document.createElement("div").innerHTML = html // create and populate a node to load linked resources, too. + } + } + + return function() { + + // If this value has already been loaded, then do not try again. + if (node.preloadState !== "READY") { + return; + } + + // Special handling for HX-GET - use built-in htmx.ajax function + // so that headers match other htmx requests, then set + // node.preloadState = TRUE so that requests are not duplicated + // in the future + var hxGet = node.getAttribute("hx-get") || node.getAttribute("data-hx-get") + if (hxGet) { + htmx.ajax("GET", hxGet, { + source: node, + handler:function(elt, info) { + done(info.xhr.responseText); + } + }); + return; + } + + // Otherwise, perform a standard xhr request, then set + // node.preloadState = TRUE so that requests are not duplicated + // in the future. + if (node.getAttribute("href")) { + var r = new XMLHttpRequest(); + r.open("GET", node.getAttribute("href")); + r.onload = function() {done(r.responseText);}; + r.send(); + return; + } + } + } + + // This function processes a specific node and sets up event handlers. + // We'll search for nodes and use it below. + var init = function(node) { + + // If this node DOES NOT include a "GET" transaction, then there's nothing to do here. + if (node.getAttribute("href") + node.getAttribute("hx-get") + node.getAttribute("data-hx-get") == "") { + return; + } + + // Guarantee that we only initialize each node once. + if (node.preloadState !== undefined) { + return; + } + + // Get event name from config. + var on = attr(node, "preload") || "mousedown" + const always = on.indexOf("always") !== -1 + if (always) { + on = on.replace('always', '').trim() + } + + // FALL THROUGH to here means we need to add an EventListener + + // Apply the listener to the node + node.addEventListener(on, function(evt) { + if (node.preloadState === "PAUSE") { // Only add one event listener + node.preloadState = "READY"; // Required for the `load` function to trigger + + // Special handling for "mouseover" events. Wait 100ms before triggering load. + if (on === "mouseover") { + window.setTimeout(load(node), 100); + } else { + load(node)() // all other events trigger immediately. + } + } + }) + + // Special handling for certain built-in event handlers + switch (on) { + + case "mouseover": + // Mirror `touchstart` events (fires immediately) + node.addEventListener("touchstart", load(node)); + + // WHhen the mouse leaves, immediately disable the preload + node.addEventListener("mouseout", function(evt) { + if ((evt.target === node) && (node.preloadState === "READY")) { + node.preloadState = "PAUSE"; + } + }) + break; + + case "mousedown": + // Mirror `touchstart` events (fires immediately) + node.addEventListener("touchstart", load(node)); + break; + } + + // Mark the node as ready to run. + node.preloadState = "PAUSE"; + node.preloadAlways = always; + htmx.trigger(node, "preload:init") // This event can be used to load content immediately. + } + + // Search for all child nodes that have a "preload" attribute + event.target.querySelectorAll("[preload]").forEach(function(node) { + + // Initialize the node with the "preload" attribute + init(node) + + // Initialize all child elements that are anchors or have `hx-get` (use with care) + node.querySelectorAll("a,[hx-get],[data-hx-get]").forEach(init) + }) + } +}) diff --git a/assets/static/js/htmx/ext/rails-method.js b/assets/static/js/htmx/ext/rails-method.js new file mode 100644 index 0000000..5d48ecc --- /dev/null +++ b/assets/static/js/htmx/ext/rails-method.js @@ -0,0 +1,10 @@ +htmx.defineExtension('rails-method', { + onEvent: function (name, evt) { + if (name === "configRequest.htmx") { + var methodOverride = evt.detail.headers['X-HTTP-Method-Override']; + if (methodOverride) { + evt.detail.parameters['_method'] = methodOverride; + } + } + } +}); diff --git a/assets/static/js/htmx/ext/remove-me.js b/assets/static/js/htmx/ext/remove-me.js new file mode 100644 index 0000000..42be993 --- /dev/null +++ b/assets/static/js/htmx/ext/remove-me.js @@ -0,0 +1,27 @@ +(function(){ + function maybeRemoveMe(elt) { + var timing = elt.getAttribute("remove-me") || elt.getAttribute("data-remove-me"); + if (timing) { + setTimeout(function () { + elt.parentElement.removeChild(elt); + }, htmx.parseInterval(timing)); + } + } + + htmx.defineExtension('remove-me', { + onEvent: function (name, evt) { + if (name === "htmx:afterProcessNode") { + var elt = evt.detail.elt; + if (elt.getAttribute) { + maybeRemoveMe(elt); + if (elt.querySelectorAll) { + var children = elt.querySelectorAll("[remove-me], [data-remove-me]"); + for (var i = 0; i < children.length; i++) { + maybeRemoveMe(children[i]); + } + } + } + } + } + }); +})(); diff --git a/assets/static/js/htmx/ext/response-targets.js b/assets/static/js/htmx/ext/response-targets.js new file mode 100644 index 0000000..dd6fd41 --- /dev/null +++ b/assets/static/js/htmx/ext/response-targets.js @@ -0,0 +1,130 @@ +(function(){ + + /** @type {import("../htmx").HtmxInternalApi} */ + var api; + + var attrPrefix = 'hx-target-'; + + // IE11 doesn't support string.startsWith + function startsWith(str, prefix) { + return str.substring(0, prefix.length) === prefix + } + + /** + * @param {HTMLElement} elt + * @param {number} respCode + * @returns {HTMLElement | null} + */ + function getRespCodeTarget(elt, respCodeNumber) { + if (!elt || !respCodeNumber) return null; + + var respCode = respCodeNumber.toString(); + + // '*' is the original syntax, as the obvious character for a wildcard. + // The 'x' alternative was added for maximum compatibility with HTML + // templating engines, due to ambiguity around which characters are + // supported in HTML attributes. + // + // Start with the most specific possible attribute and generalize from + // there. + var attrPossibilities = [ + respCode, + + respCode.substr(0, 2) + '*', + respCode.substr(0, 2) + 'x', + + respCode.substr(0, 1) + '*', + respCode.substr(0, 1) + 'x', + respCode.substr(0, 1) + '**', + respCode.substr(0, 1) + 'xx', + + '*', + 'x', + '***', + 'xxx', + ]; + if (startsWith(respCode, '4') || startsWith(respCode, '5')) { + attrPossibilities.push('error'); + } + + for (var i = 0; i < attrPossibilities.length; i++) { + var attr = attrPrefix + attrPossibilities[i]; + var attrValue = api.getClosestAttributeValue(elt, attr); + if (attrValue) { + if (attrValue === "this") { + return api.findThisElement(elt, attr); + } else { + return api.querySelectorExt(elt, attrValue); + } + } + } + + return null; + } + + /** @param {Event} evt */ + function handleErrorFlag(evt) { + if (evt.detail.isError) { + if (htmx.config.responseTargetUnsetsError) { + evt.detail.isError = false; + } + } else if (htmx.config.responseTargetSetsError) { + evt.detail.isError = true; + } + } + + htmx.defineExtension('response-targets', { + + /** @param {import("../htmx").HtmxInternalApi} apiRef */ + init: function (apiRef) { + api = apiRef; + + if (htmx.config.responseTargetUnsetsError === undefined) { + htmx.config.responseTargetUnsetsError = true; + } + if (htmx.config.responseTargetSetsError === undefined) { + htmx.config.responseTargetSetsError = false; + } + if (htmx.config.responseTargetPrefersExisting === undefined) { + htmx.config.responseTargetPrefersExisting = false; + } + if (htmx.config.responseTargetPrefersRetargetHeader === undefined) { + htmx.config.responseTargetPrefersRetargetHeader = true; + } + }, + + /** + * @param {string} name + * @param {Event} evt + */ + onEvent: function (name, evt) { + if (name === "htmx:beforeSwap" && + evt.detail.xhr && + evt.detail.xhr.status !== 200) { + if (evt.detail.target) { + if (htmx.config.responseTargetPrefersExisting) { + evt.detail.shouldSwap = true; + handleErrorFlag(evt); + return true; + } + if (htmx.config.responseTargetPrefersRetargetHeader && + evt.detail.xhr.getAllResponseHeaders().match(/HX-Retarget:/i)) { + evt.detail.shouldSwap = true; + handleErrorFlag(evt); + return true; + } + } + if (!evt.detail.requestConfig) { + return true; + } + var target = getRespCodeTarget(evt.detail.requestConfig.elt, evt.detail.xhr.status); + if (target) { + handleErrorFlag(evt); + evt.detail.shouldSwap = true; + evt.detail.target = target; + } + return true; + } + } + }); +})(); diff --git a/assets/static/js/htmx/ext/restored.js b/assets/static/js/htmx/ext/restored.js new file mode 100644 index 0000000..6f65267 --- /dev/null +++ b/assets/static/js/htmx/ext/restored.js @@ -0,0 +1,15 @@ +htmx.defineExtension('restored', { + onEvent : function(name, evt) { + if (name === 'htmx:restored'){ + var restoredElts = evt.detail.document.querySelectorAll( + "[hx-trigger='restored'],[data-hx-trigger='restored']" + ); + // need a better way to do this, would prefer to just trigger from evt.detail.elt + var foundElt = Array.from(restoredElts).find( + (x) => (x.outerHTML === evt.detail.elt.outerHTML) + ); + var restoredEvent = evt.detail.triggerEvent(foundElt, 'restored'); + } + return; + } +}) \ No newline at end of file diff --git a/assets/static/js/htmx/ext/sse.js b/assets/static/js/htmx/ext/sse.js new file mode 100644 index 0000000..75c875a --- /dev/null +++ b/assets/static/js/htmx/ext/sse.js @@ -0,0 +1,322 @@ +/* +Server Sent Events Extension +============================ +This extension adds support for Server Sent Events to htmx. See /www/extensions/sse.md for usage instructions. + +*/ + +(function(){ + + /** @type {import("../htmx").HtmxInternalApi} */ + var api; + + htmx.defineExtension("sse", { + + /** + * Init saves the provided reference to the internal HTMX API. + * + * @param {import("../htmx").HtmxInternalApi} api + * @returns void + */ + init: function(apiRef) { + // store a reference to the internal API. + api = apiRef; + + // set a function in the public API for creating new EventSource objects + if (htmx.createEventSource == undefined) { + htmx.createEventSource = createEventSource; + } + }, + + /** + * onEvent handles all events passed to this extension. + * + * @param {string} name + * @param {Event} evt + * @returns void + */ + onEvent: function(name, evt) { + + switch (name) { + + // Try to remove remove an EventSource when elements are removed + case "htmx:beforeCleanupElement": + var internalData = api.getInternalData(evt.target) + if (internalData.sseEventSource) { + internalData.sseEventSource.close(); + } + return; + + // Try to create EventSources when elements are processed + case "htmx:afterProcessNode": + createEventSourceOnElement(evt.target); + } + } + }); + + /////////////////////////////////////////////// + // HELPER FUNCTIONS + /////////////////////////////////////////////// + + + /** + * createEventSource is the default method for creating new EventSource objects. + * it is hoisted into htmx.config.createEventSource to be overridden by the user, if needed. + * + * @param {string} url + * @returns EventSource + */ + function createEventSource(url) { + return new EventSource(url, {withCredentials:true}); + } + + function splitOnWhitespace(trigger) { + return trigger.trim().split(/\s+/); + } + + function getLegacySSEURL(elt) { + var legacySSEValue = api.getAttributeValue(elt, "hx-sse"); + if (legacySSEValue) { + var values = splitOnWhitespace(legacySSEValue); + for (var i = 0; i < values.length; i++) { + var value = values[i].split(/:(.+)/); + if (value[0] === "connect") { + return value[1]; + } + } + } + } + + function getLegacySSESwaps(elt) { + var legacySSEValue = api.getAttributeValue(elt, "hx-sse"); + var returnArr = []; + if (legacySSEValue) { + var values = splitOnWhitespace(legacySSEValue); + for (var i = 0; i < values.length; i++) { + var value = values[i].split(/:(.+)/); + if (value[0] === "swap") { + returnArr.push(value[1]); + } + } + } + return returnArr; + } + + /** + * createEventSourceOnElement creates a new EventSource connection on the provided element. + * If a usable EventSource already exists, then it is returned. If not, then a new EventSource + * is created and stored in the element's internalData. + * @param {HTMLElement} elt + * @param {number} retryCount + * @returns {EventSource | null} + */ + function createEventSourceOnElement(elt, retryCount) { + + if (elt == null) { + return null; + } + + var internalData = api.getInternalData(elt); + + // get URL from element's attribute + var sseURL = api.getAttributeValue(elt, "sse-connect"); + + + if (sseURL == undefined) { + var legacyURL = getLegacySSEURL(elt) + if (legacyURL) { + sseURL = legacyURL; + } else { + return null; + } + } + + // Connect to the EventSource + var source = htmx.createEventSource(sseURL); + internalData.sseEventSource = source; + + // Create event handlers + source.onerror = function (err) { + + // Log an error event + api.triggerErrorEvent(elt, "htmx:sseError", {error:err, source:source}); + + // If parent no longer exists in the document, then clean up this EventSource + if (maybeCloseSSESource(elt)) { + return; + } + + // Otherwise, try to reconnect the EventSource + if (source.readyState === EventSource.CLOSED) { + retryCount = retryCount || 0; + var timeout = Math.random() * (2 ^ retryCount) * 500; + window.setTimeout(function() { + createEventSourceOnElement(elt, Math.min(7, retryCount+1)); + }, timeout); + } + }; + + source.onopen = function (evt) { + api.triggerEvent(elt, "htmx:sseOpen", {source: source}); + } + + // Add message handlers for every `sse-swap` attribute + queryAttributeOnThisOrChildren(elt, "sse-swap").forEach(function(child) { + + var sseSwapAttr = api.getAttributeValue(child, "sse-swap"); + if (sseSwapAttr) { + var sseEventNames = sseSwapAttr.split(","); + } else { + var sseEventNames = getLegacySSESwaps(child); + } + + for (var i = 0 ; i < sseEventNames.length ; i++) { + var sseEventName = sseEventNames[i].trim(); + var listener = function(event) { + + // If the parent is missing then close SSE and remove listener + if (maybeCloseSSESource(elt)) { + source.removeEventListener(sseEventName, listener); + return; + } + + // swap the response into the DOM and trigger a notification + swap(child, event.data); + api.triggerEvent(elt, "htmx:sseMessage", event); + }; + + // Register the new listener + api.getInternalData(elt).sseEventListener = listener; + source.addEventListener(sseEventName, listener); + } + }); + + // Add message handlers for every `hx-trigger="sse:*"` attribute + queryAttributeOnThisOrChildren(elt, "hx-trigger").forEach(function(child) { + + var sseEventName = api.getAttributeValue(child, "hx-trigger"); + if (sseEventName == null) { + return; + } + + // Only process hx-triggers for events with the "sse:" prefix + if (sseEventName.slice(0, 4) != "sse:") { + return; + } + + var listener = function(event) { + + // If parent is missing, then close SSE and remove listener + if (maybeCloseSSESource(elt)) { + source.removeEventListener(sseEventName, listener); + return; + } + + // Trigger events to be handled by the rest of htmx + htmx.trigger(child, sseEventName, event); + htmx.trigger(child, "htmx:sseMessage", event); + } + + // Register the new listener + api.getInternalData(elt).sseEventListener = listener; + source.addEventListener(sseEventName.slice(4), listener); + }); + } + + /** + * maybeCloseSSESource confirms that the parent element still exists. + * If not, then any associated SSE source is closed and the function returns true. + * + * @param {HTMLElement} elt + * @returns boolean + */ + function maybeCloseSSESource(elt) { + if (!api.bodyContains(elt)) { + var source = api.getInternalData(elt).sseEventSource; + if (source != undefined) { + source.close(); + // source = null + return true; + } + } + return false; + } + + /** + * queryAttributeOnThisOrChildren returns all nodes that contain the requested attributeName, INCLUDING THE PROVIDED ROOT ELEMENT. + * + * @param {HTMLElement} elt + * @param {string} attributeName + */ + function queryAttributeOnThisOrChildren(elt, attributeName) { + + var result = []; + + // If the parent element also contains the requested attribute, then add it to the results too. + if (api.hasAttribute(elt, attributeName) || api.hasAttribute(elt, "hx-sse")) { + result.push(elt); + } + + // Search all child nodes that match the requested attribute + elt.querySelectorAll("[" + attributeName + "], [data-" + attributeName + "], [hx-sse], [data-hx-sse]").forEach(function(node) { + result.push(node); + }); + + return result; + } + + /** + * @param {HTMLElement} elt + * @param {string} content + */ + function swap(elt, content) { + + api.withExtensions(elt, function(extension) { + content = extension.transformResponse(content, null, elt); + }); + + var swapSpec = api.getSwapSpecification(elt); + var target = api.getTarget(elt); + var settleInfo = api.makeSettleInfo(elt); + + api.selectAndSwap(swapSpec.swapStyle, target, elt, content, settleInfo); + + settleInfo.elts.forEach(function (elt) { + if (elt.classList) { + elt.classList.add(htmx.config.settlingClass); + } + api.triggerEvent(elt, 'htmx:beforeSettle'); + }); + + // Handle settle tasks (with delay if requested) + if (swapSpec.settleDelay > 0) { + setTimeout(doSettle(settleInfo), swapSpec.settleDelay); + } else { + doSettle(settleInfo)(); + } + } + + /** + * doSettle mirrors much of the functionality in htmx that + * settles elements after their content has been swapped. + * TODO: this should be published by htmx, and not duplicated here + * @param {import("../htmx").HtmxSettleInfo} settleInfo + * @returns () => void + */ + function doSettle(settleInfo) { + + return function() { + settleInfo.tasks.forEach(function (task) { + task.call(); + }); + + settleInfo.elts.forEach(function (elt) { + if (elt.classList) { + elt.classList.remove(htmx.config.settlingClass); + } + api.triggerEvent(elt, 'htmx:afterSettle'); + }); + } + } + +})(); \ No newline at end of file diff --git a/assets/static/js/htmx/ext/ws.js b/assets/static/js/htmx/ext/ws.js new file mode 100644 index 0000000..3366e9e --- /dev/null +++ b/assets/static/js/htmx/ext/ws.js @@ -0,0 +1,477 @@ +/* +WebSockets Extension +============================ +This extension adds support for WebSockets to htmx. See /www/extensions/ws.md for usage instructions. +*/ + +(function () { + + /** @type {import("../htmx").HtmxInternalApi} */ + var api; + + htmx.defineExtension("ws", { + + /** + * init is called once, when this extension is first registered. + * @param {import("../htmx").HtmxInternalApi} apiRef + */ + init: function (apiRef) { + + // Store reference to internal API + api = apiRef; + + // Default function for creating new EventSource objects + if (!htmx.createWebSocket) { + htmx.createWebSocket = createWebSocket; + } + + // Default setting for reconnect delay + if (!htmx.config.wsReconnectDelay) { + htmx.config.wsReconnectDelay = "full-jitter"; + } + }, + + /** + * onEvent handles all events passed to this extension. + * + * @param {string} name + * @param {Event} evt + */ + onEvent: function (name, evt) { + + switch (name) { + + // Try to close the socket when elements are removed + case "htmx:beforeCleanupElement": + + var internalData = api.getInternalData(evt.target) + + if (internalData.webSocket) { + internalData.webSocket.close(); + } + return; + + // Try to create websockets when elements are processed + case "htmx:beforeProcessNode": + var parent = evt.target; + + forEach(queryAttributeOnThisOrChildren(parent, "ws-connect"), function (child) { + ensureWebSocket(child) + }); + forEach(queryAttributeOnThisOrChildren(parent, "ws-send"), function (child) { + ensureWebSocketSend(child) + }); + } + } + }); + + function splitOnWhitespace(trigger) { + return trigger.trim().split(/\s+/); + } + + function getLegacyWebsocketURL(elt) { + var legacySSEValue = api.getAttributeValue(elt, "hx-ws"); + if (legacySSEValue) { + var values = splitOnWhitespace(legacySSEValue); + for (var i = 0; i < values.length; i++) { + var value = values[i].split(/:(.+)/); + if (value[0] === "connect") { + return value[1]; + } + } + } + } + + /** + * ensureWebSocket creates a new WebSocket on the designated element, using + * the element's "ws-connect" attribute. + * @param {HTMLElement} socketElt + * @returns + */ + function ensureWebSocket(socketElt) { + + // If the element containing the WebSocket connection no longer exists, then + // do not connect/reconnect the WebSocket. + if (!api.bodyContains(socketElt)) { + return; + } + + // Get the source straight from the element's value + var wssSource = api.getAttributeValue(socketElt, "ws-connect") + + if (wssSource == null || wssSource === "") { + var legacySource = getLegacyWebsocketURL(socketElt); + if (legacySource == null) { + return; + } else { + wssSource = legacySource; + } + } + + // Guarantee that the wssSource value is a fully qualified URL + if (wssSource.indexOf("/") === 0) { + var base_part = location.hostname + (location.port ? ':' + location.port : ''); + if (location.protocol === 'https:') { + wssSource = "wss://" + base_part + wssSource; + } else if (location.protocol === 'http:') { + wssSource = "ws://" + base_part + wssSource; + } + } + + var socketWrapper = createWebsocketWrapper(socketElt, function () { + return htmx.createWebSocket(wssSource) + }); + + socketWrapper.addEventListener('message', function (event) { + if (maybeCloseWebSocketSource(socketElt)) { + return; + } + + var response = event.data; + if (!api.triggerEvent(socketElt, "htmx:wsBeforeMessage", { + message: response, + socketWrapper: socketWrapper.publicInterface + })) { + return; + } + + api.withExtensions(socketElt, function (extension) { + response = extension.transformResponse(response, null, socketElt); + }); + + var settleInfo = api.makeSettleInfo(socketElt); + var fragment = api.makeFragment(response); + + if (fragment.children.length) { + var children = Array.from(fragment.children); + for (var i = 0; i < children.length; i++) { + api.oobSwap(api.getAttributeValue(children[i], "hx-swap-oob") || "true", children[i], settleInfo); + } + } + + api.settleImmediately(settleInfo.tasks); + api.triggerEvent(socketElt, "htmx:wsAfterMessage", { message: response, socketWrapper: socketWrapper.publicInterface }) + }); + + // Put the WebSocket into the HTML Element's custom data. + api.getInternalData(socketElt).webSocket = socketWrapper; + } + + /** + * @typedef {Object} WebSocketWrapper + * @property {WebSocket} socket + * @property {Array<{message: string, sendElt: Element}>} messageQueue + * @property {number} retryCount + * @property {(message: string, sendElt: Element) => void} sendImmediately sendImmediately sends message regardless of websocket connection state + * @property {(message: string, sendElt: Element) => void} send + * @property {(event: string, handler: Function) => void} addEventListener + * @property {() => void} handleQueuedMessages + * @property {() => void} init + * @property {() => void} close + */ + /** + * + * @param socketElt + * @param socketFunc + * @returns {WebSocketWrapper} + */ + function createWebsocketWrapper(socketElt, socketFunc) { + var wrapper = { + socket: null, + messageQueue: [], + retryCount: 0, + + /** @type {Object} */ + events: {}, + + addEventListener: function (event, handler) { + if (this.socket) { + this.socket.addEventListener(event, handler); + } + + if (!this.events[event]) { + this.events[event] = []; + } + + this.events[event].push(handler); + }, + + sendImmediately: function (message, sendElt) { + if (!this.socket) { + api.triggerErrorEvent() + } + if (sendElt && api.triggerEvent(sendElt, 'htmx:wsBeforeSend', { + message: message, + socketWrapper: this.publicInterface + })) { + this.socket.send(message); + sendElt && api.triggerEvent(sendElt, 'htmx:wsAfterSend', { + message: message, + socketWrapper: this.publicInterface + }) + } + }, + + send: function (message, sendElt) { + if (this.socket.readyState !== this.socket.OPEN) { + this.messageQueue.push({ message: message, sendElt: sendElt }); + } else { + this.sendImmediately(message, sendElt); + } + }, + + handleQueuedMessages: function () { + while (this.messageQueue.length > 0) { + var queuedItem = this.messageQueue[0] + if (this.socket.readyState === this.socket.OPEN) { + this.sendImmediately(queuedItem.message, queuedItem.sendElt); + this.messageQueue.shift(); + } else { + break; + } + } + }, + + init: function () { + if (this.socket && this.socket.readyState === this.socket.OPEN) { + // Close discarded socket + this.socket.close() + } + + // Create a new WebSocket and event handlers + /** @type {WebSocket} */ + var socket = socketFunc(); + + // The event.type detail is added for interface conformance with the + // other two lifecycle events (open and close) so a single handler method + // can handle them polymorphically, if required. + api.triggerEvent(socketElt, "htmx:wsConnecting", { event: { type: 'connecting' } }); + + this.socket = socket; + + socket.onopen = function (e) { + wrapper.retryCount = 0; + api.triggerEvent(socketElt, "htmx:wsOpen", { event: e, socketWrapper: wrapper.publicInterface }); + wrapper.handleQueuedMessages(); + } + + socket.onclose = function (e) { + // If socket should not be connected, stop further attempts to establish connection + // If Abnormal Closure/Service Restart/Try Again Later, then set a timer to reconnect after a pause. + if (!maybeCloseWebSocketSource(socketElt) && [1006, 1012, 1013].indexOf(e.code) >= 0) { + var delay = getWebSocketReconnectDelay(wrapper.retryCount); + setTimeout(function () { + wrapper.retryCount += 1; + wrapper.init(); + }, delay); + } + + // Notify client code that connection has been closed. Client code can inspect `event` field + // to determine whether closure has been valid or abnormal + api.triggerEvent(socketElt, "htmx:wsClose", { event: e, socketWrapper: wrapper.publicInterface }) + }; + + socket.onerror = function (e) { + api.triggerErrorEvent(socketElt, "htmx:wsError", { error: e, socketWrapper: wrapper }); + maybeCloseWebSocketSource(socketElt); + }; + + var events = this.events; + Object.keys(events).forEach(function (k) { + events[k].forEach(function (e) { + socket.addEventListener(k, e); + }) + }); + }, + + close: function () { + this.socket.close() + } + } + + wrapper.init(); + + wrapper.publicInterface = { + send: wrapper.send.bind(wrapper), + sendImmediately: wrapper.sendImmediately.bind(wrapper), + queue: wrapper.messageQueue + }; + + return wrapper; + } + + /** + * ensureWebSocketSend attaches trigger handles to elements with + * "ws-send" attribute + * @param {HTMLElement} elt + */ + function ensureWebSocketSend(elt) { + var legacyAttribute = api.getAttributeValue(elt, "hx-ws"); + if (legacyAttribute && legacyAttribute !== 'send') { + return; + } + + var webSocketParent = api.getClosestMatch(elt, hasWebSocket) + processWebSocketSend(webSocketParent, elt); + } + + /** + * hasWebSocket function checks if a node has webSocket instance attached + * @param {HTMLElement} node + * @returns {boolean} + */ + function hasWebSocket(node) { + return api.getInternalData(node).webSocket != null; + } + + /** + * processWebSocketSend adds event listeners to the

    element so that + * messages can be sent to the WebSocket server when the form is submitted. + * @param {HTMLElement} socketElt + * @param {HTMLElement} sendElt + */ + function processWebSocketSend(socketElt, sendElt) { + var nodeData = api.getInternalData(sendElt); + var triggerSpecs = api.getTriggerSpecs(sendElt); + triggerSpecs.forEach(function (ts) { + api.addTriggerHandler(sendElt, ts, nodeData, function (elt, evt) { + if (maybeCloseWebSocketSource(socketElt)) { + return; + } + + /** @type {WebSocketWrapper} */ + var socketWrapper = api.getInternalData(socketElt).webSocket; + var headers = api.getHeaders(sendElt, api.getTarget(sendElt)); + var results = api.getInputValues(sendElt, 'post'); + var errors = results.errors; + var rawParameters = results.values; + var expressionVars = api.getExpressionVars(sendElt); + var allParameters = api.mergeObjects(rawParameters, expressionVars); + var filteredParameters = api.filterValues(allParameters, sendElt); + + var sendConfig = { + parameters: filteredParameters, + unfilteredParameters: allParameters, + headers: headers, + errors: errors, + + triggeringEvent: evt, + messageBody: undefined, + socketWrapper: socketWrapper.publicInterface + }; + + if (!api.triggerEvent(elt, 'htmx:wsConfigSend', sendConfig)) { + return; + } + + if (errors && errors.length > 0) { + api.triggerEvent(elt, 'htmx:validation:halted', errors); + return; + } + + var body = sendConfig.messageBody; + if (body === undefined) { + var toSend = Object.assign({}, sendConfig.parameters); + if (sendConfig.headers) + toSend['HEADERS'] = headers; + body = JSON.stringify(toSend); + } + + socketWrapper.send(body, elt); + + if (evt && api.shouldCancel(evt, elt)) { + evt.preventDefault(); + } + }); + }); + } + + /** + * getWebSocketReconnectDelay is the default easing function for WebSocket reconnects. + * @param {number} retryCount // The number of retries that have already taken place + * @returns {number} + */ + function getWebSocketReconnectDelay(retryCount) { + + /** @type {"full-jitter" | ((retryCount:number) => number)} */ + var delay = htmx.config.wsReconnectDelay; + if (typeof delay === 'function') { + return delay(retryCount); + } + if (delay === 'full-jitter') { + var exp = Math.min(retryCount, 6); + var maxDelay = 1000 * Math.pow(2, exp); + return maxDelay * Math.random(); + } + + logError('htmx.config.wsReconnectDelay must either be a function or the string "full-jitter"'); + } + + /** + * maybeCloseWebSocketSource checks to the if the element that created the WebSocket + * still exists in the DOM. If NOT, then the WebSocket is closed and this function + * returns TRUE. If the element DOES EXIST, then no action is taken, and this function + * returns FALSE. + * + * @param {*} elt + * @returns + */ + function maybeCloseWebSocketSource(elt) { + if (!api.bodyContains(elt)) { + api.getInternalData(elt).webSocket.close(); + return true; + } + return false; + } + + /** + * createWebSocket is the default method for creating new WebSocket objects. + * it is hoisted into htmx.createWebSocket to be overridden by the user, if needed. + * + * @param {string} url + * @returns WebSocket + */ + function createWebSocket(url) { + var sock = new WebSocket(url, []); + sock.binaryType = htmx.config.wsBinaryType; + return sock; + } + + /** + * queryAttributeOnThisOrChildren returns all nodes that contain the requested attributeName, INCLUDING THE PROVIDED ROOT ELEMENT. + * + * @param {HTMLElement} elt + * @param {string} attributeName + */ + function queryAttributeOnThisOrChildren(elt, attributeName) { + + var result = [] + + // If the parent element also contains the requested attribute, then add it to the results too. + if (api.hasAttribute(elt, attributeName) || api.hasAttribute(elt, "hx-ws")) { + result.push(elt); + } + + // Search all child nodes that match the requested attribute + elt.querySelectorAll("[" + attributeName + "], [data-" + attributeName + "], [data-hx-ws], [hx-ws]").forEach(function (node) { + result.push(node) + }) + + return result + } + + /** + * @template T + * @param {T[]} arr + * @param {(T) => void} func + */ + function forEach(arr, func) { + if (arr) { + for (var i = 0; i < arr.length; i++) { + func(arr[i]); + } + } + } + +})(); + diff --git a/assets/static/js/htmx/htmx.d.ts b/assets/static/js/htmx/htmx.d.ts new file mode 100644 index 0000000..ee9c6d9 --- /dev/null +++ b/assets/static/js/htmx/htmx.d.ts @@ -0,0 +1,399 @@ +// https://htmx.org/reference/#api + +/** + * This method adds a class to the given element. + * + * https://htmx.org/api/#addClass + * + * @param elt the element to add the class to + * @param clazz the class to add + * @param delay the delay (in milliseconds before class is added) + */ +export function addClass(elt: Element, clazz: string, delay?: number): void; + +/** + * Issues an htmx-style AJAX request + * + * https://htmx.org/api/#ajax + * + * @param verb 'GET', 'POST', etc. + * @param path the URL path to make the AJAX + * @param element the element to target (defaults to the **body**) + * @returns Promise that resolves immediately if no request is sent, or when the request is complete + */ +export function ajax(verb: string, path: string, element: Element): Promise; + +/** + * Issues an htmx-style AJAX request + * + * https://htmx.org/api/#ajax + * + * @param verb 'GET', 'POST', etc. + * @param path the URL path to make the AJAX + * @param selector a selector for the target + * @returns Promise that resolves immediately if no request is sent, or when the request is complete + */ +export function ajax(verb: string, path: string, selector: string): Promise; + +/** + * Issues an htmx-style AJAX request + * + * https://htmx.org/api/#ajax + * + * @param verb 'GET', 'POST', etc. + * @param path the URL path to make the AJAX + * @param context a context object that contains any of the following + * @returns Promise that resolves immediately if no request is sent, or when the request is complete + */ +export function ajax( + verb: string, + path: string, + context: Partial<{ source: any; event: any; handler: any; target: any; swap: any; values: any; headers: any }> +): Promise; + +/** + * Finds the closest matching element in the given elements parentage, inclusive of the element + * + * https://htmx.org/api/#closest + * + * @param elt the element to find the selector from + * @param selector the selector to find + */ +export function closest(elt: Element, selector: string): Element | null; + +/** + * A property holding the configuration htmx uses at runtime. + * + * Note that using a [meta tag](https://htmx.org/docs/#config) is the preferred mechanism for setting these properties. + * + * https://htmx.org/api/#config + */ +export var config: HtmxConfig; + +/** + * A property used to create new [Server Sent Event](https://htmx.org/docs/#sse) sources. This can be updated to provide custom SSE setup. + * + * https://htmx.org/api/#createEventSource + */ +export var createEventSource: (url: string) => EventSource; + +/** + * A property used to create new [WebSocket](https://htmx.org/docs/#websockets). This can be updated to provide custom WebSocket setup. + * + * https://htmx.org/api/#createWebSocket + */ +export var createWebSocket: (url: string) => WebSocket; + +/** + * Defines a new htmx [extension](https://htmx.org/extensions). + * + * https://htmx.org/api/#defineExtension + * + * @param name the extension name + * @param ext the extension definition + */ +export function defineExtension(name: string, ext: HtmxExtension): void; + +/** + * Finds an element matching the selector + * + * https://htmx.org/api/#find + * + * @param selector the selector to match + */ +export function find(selector: string): Element | null; + +/** + * Finds an element matching the selector + * + * https://htmx.org/api/#find + * + * @param elt the root element to find the matching element in, inclusive + * @param selector the selector to match + */ +export function find(elt: Element, selector: string): Element | null; + +/** + * Finds all elements matching the selector + * + * https://htmx.org/api/#findAll + * + * @param selector the selector to match + */ +export function findAll(selector: string): NodeListOf; + +/** + * Finds all elements matching the selector + * + * https://htmx.org/api/#findAll + * + * @param elt the root element to find the matching elements in, inclusive + * @param selector the selector to match + */ +export function findAll(elt: Element, selector: string): NodeListOf; + +/** + * Log all htmx events, useful for debugging. + * + * https://htmx.org/api/#logAll + */ +export function logAll(): void; + +/** + * The logger htmx uses to log with + * + * https://htmx.org/api/#logger + */ +export var logger: (elt: Element, eventName: string, detail: any) => void | null; + +/** + * Removes an event listener from an element + * + * https://htmx.org/api/#off + * + * @param eventName the event name to remove the listener from + * @param listener the listener to remove + */ +export function off(eventName: string, listener: (evt: Event) => void): (evt: Event) => void; + +/** + * Removes an event listener from an element + * + * https://htmx.org/api/#off + * + * @param target the element to remove the listener from + * @param eventName the event name to remove the listener from + * @param listener the listener to remove + */ +export function off(target: string, eventName: string, listener: (evt: Event) => void): (evt: Event) => void; + +/** + * Adds an event listener to an element + * + * https://htmx.org/api/#on + * + * @param eventName the event name to add the listener for + * @param listener the listener to add + */ +export function on(eventName: string, listener: (evt: Event) => void): (evt: Event) => void; + +/** + * Adds an event listener to an element + * + * https://htmx.org/api/#on + * + * @param target the element to add the listener to + * @param eventName the event name to add the listener for + * @param listener the listener to add + */ +export function on(target: string, eventName: string, listener: (evt: Event) => void): (evt: Event) => void; + +/** + * Adds a callback for the **htmx:load** event. This can be used to process new content, for example initializing the content with a javascript library + * + * https://htmx.org/api/#onLoad + * + * @param callback the callback to call on newly loaded content + */ +export function onLoad(callback: (element: Element) => void): void; + +/** + * Parses an interval string consistent with the way htmx does. Useful for plugins that have timing-related attributes. + * + * Caution: Accepts an int followed by either **s** or **ms**. All other values use **parseFloat** + * + * https://htmx.org/api/#parseInterval + * + * @param str timing string + */ +export function parseInterval(str: string): number; + +/** + * Processes new content, enabling htmx behavior. This can be useful if you have content that is added to the DOM outside of the normal htmx request cycle but still want htmx attributes to work. + * + * https://htmx.org/api/#process + * + * @param element element to process + */ +export function process(element: Element): void; + +/** + * Removes an element from the DOM + * + * https://htmx.org/api/#remove + * + * @param elt element to remove + * @param delay the delay (in milliseconds before element is removed) + */ +export function remove(elt: Element, delay?: number): void; + +/** + * Removes a class from the given element + * + * https://htmx.org/api/#removeClass + * + * @param elt element to remove the class from + * @param clazz the class to remove + * @param delay the delay (in milliseconds before class is removed) + */ +export function removeClass(elt: Element, clazz: string, delay?: number): void; + +/** + * Removes the given extension from htmx + * + * https://htmx.org/api/#removeExtension + * + * @param name the name of the extension to remove + */ +export function removeExtension(name: string): void; + +/** + * Takes the given class from its siblings, so that among its siblings, only the given element will have the class. + * + * https://htmx.org/api/#takeClass + * + * @param elt the element that will take the class + * @param clazz the class to take + */ +export function takeClass(elt: Element, clazz: string): void; + +/** + * Toggles the given class on an element + * + * https://htmx.org/api/#toggleClass + * + * @param elt the element to toggle the class on + * @param clazz the class to toggle + */ +export function toggleClass(elt: Element, clazz: string): void; + +/** + * Triggers a given event on an element + * + * https://htmx.org/api/#trigger + * + * @param elt the element to trigger the event on + * @param name the name of the event to trigger + * @param detail details for the event + */ +export function trigger(elt: Element, name: string, detail: any): void; + +/** + * Returns the input values that would resolve for a given element via the htmx value resolution mechanism + * + * https://htmx.org/api/#values + * + * @param elt the element to resolve values on + * @param requestType the request type (e.g. **get** or **post**) non-GET's will include the enclosing form of the element. Defaults to **post** + */ +export function values(elt: Element, requestType?: string): any; + +export const version: string; + +export interface HtmxConfig { + /** + * The attributes to settle during the settling phase. + * @default ["class", "style", "width", "height"] + */ + attributesToSettle?: ["class", "style", "width", "height"] | string[]; + /** + * If the focused element should be scrolled into view. + * @default false + */ + defaultFocusScroll?: boolean; + /** + * The default delay between completing the content swap and settling attributes. + * @default 20 + */ + defaultSettleDelay?: number; + /** + * The default delay between receiving a response from the server and doing the swap. + * @default 0 + */ + defaultSwapDelay?: number; + /** + * The default swap style to use if **[hx-swap](https://htmx.org/attributes/hx-swap)** is omitted. + * @default "innerHTML" + */ + defaultSwapStyle?: "innerHTML" | string; + /** + * The number of pages to keep in **localStorage** for history support. + * @default 10 + */ + historyCacheSize?: number; + /** + * Whether or not to use history. + * @default true + */ + historyEnabled?: boolean; + /** + * If true, htmx will inject a small amount of CSS into the page to make indicators invisible unless the **htmx-indicator** class is present. + * @default true + */ + includeIndicatorStyles?: boolean; + /** + * The class to place on indicators when a request is in flight. + * @default "htmx-indicator" + */ + indicatorClass?: "htmx-indicator" | string; + /** + * The class to place on triggering elements when a request is in flight. + * @default "htmx-request" + */ + requestClass?: "htmx-request" | string; + /** + * The class to temporarily place on elements that htmx has added to the DOM. + * @default "htmx-added" + */ + addedClass?: "htmx-added" | string; + /** + * The class to place on target elements when htmx is in the settling phase. + * @default "htmx-settling" + */ + settlingClass?: "htmx-settling" | string; + /** + * The class to place on target elements when htmx is in the swapping phase. + * @default "htmx-swapping" + */ + swappingClass?: "htmx-swapping" | string; + /** + * Allows the use of eval-like functionality in htmx, to enable **hx-vars**, trigger conditions & script tag evaluation. Can be set to **false** for CSP compatibility. + * @default true + */ + allowEval?: boolean; + /** + * Use HTML template tags for parsing content from the server. This allows you to use Out of Band content when returning things like table rows, but it is *not* IE11 compatible. + * @default false + */ + useTemplateFragments?: boolean; + /** + * Allow cross-site Access-Control requests using credentials such as cookies, authorization headers or TLS client certificates. + * @default false + */ + withCredentials?: boolean; + /** + * The default implementation of **getWebSocketReconnectDelay** for reconnecting after unexpected connection loss by the event code **Abnormal Closure**, **Service Restart** or **Try Again Later**. + * @default "full-jitter" + */ + wsReconnectDelay?: "full-jitter" | string | ((retryCount: number) => number); + // following don't appear in the docs + /** @default false */ + refreshOnHistoryMiss?: boolean; + /** @default 0 */ + timeout?: number; + /** @default "[hx-disable], [data-hx-disable]" */ + disableSelector?: "[hx-disable], [data-hx-disable]" | string; + /** @default "smooth" */ + scrollBehavior?: "smooth" | "auto"; +} + +/** + * https://htmx.org/extensions/#defining + */ +export interface HtmxExtension { + onEvent?: (name: string, evt: CustomEvent) => any; + transformResponse?: (text: any, xhr: XMLHttpRequest, elt: any) => any; + isInlineSwap?: (swapStyle: any) => any; + handleSwap?: (swapStyle: any, target: any, fragment: any, settleInfo: any) => any; + encodeParameters?: (xhr: XMLHttpRequest, parameters: any, elt: any) => any; +} diff --git a/assets/static/js/htmx/htmx.js b/assets/static/js/htmx/htmx.js new file mode 100644 index 0000000..9a8f109 --- /dev/null +++ b/assets/static/js/htmx/htmx.js @@ -0,0 +1,3818 @@ +// UMD insanity +// This code sets up support for (in order) AMD, ES6 modules, and globals. +(function (root, factory) { + //@ts-ignore + if (typeof define === 'function' && define.amd) { + // AMD. Register as an anonymous module. + //@ts-ignore + define([], factory); + } else if (typeof module === 'object' && module.exports) { + // Node. Does not work with strict CommonJS, but + // only CommonJS-like environments that support module.exports, + // like Node. + module.exports = factory(); + } else { + // Browser globals + root.htmx = root.htmx || factory(); + } +}(typeof self !== 'undefined' ? self : this, function () { +return (function () { + 'use strict'; + + // Public API + //** @type {import("./htmx").HtmxApi} */ + // TODO: list all methods in public API + var htmx = { + onLoad: onLoadHelper, + process: processNode, + on: addEventListenerImpl, + off: removeEventListenerImpl, + trigger : triggerEvent, + ajax : ajaxHelper, + find : find, + findAll : findAll, + closest : closest, + values : function(elt, type){ + var inputValues = getInputValues(elt, type || "post"); + return inputValues.values; + }, + remove : removeElement, + addClass : addClassToElement, + removeClass : removeClassFromElement, + toggleClass : toggleClassOnElement, + takeClass : takeClassForElement, + defineExtension : defineExtension, + removeExtension : removeExtension, + logAll : logAll, + logNone : logNone, + logger : null, + config : { + historyEnabled:true, + historyCacheSize:10, + refreshOnHistoryMiss:false, + defaultSwapStyle:'innerHTML', + defaultSwapDelay:0, + defaultSettleDelay:20, + includeIndicatorStyles:true, + indicatorClass:'htmx-indicator', + requestClass:'htmx-request', + addedClass:'htmx-added', + settlingClass:'htmx-settling', + swappingClass:'htmx-swapping', + allowEval:true, + allowScriptTags:true, + inlineScriptNonce:'', + attributesToSettle:["class", "style", "width", "height"], + withCredentials:false, + timeout:0, + wsReconnectDelay: 'full-jitter', + wsBinaryType: 'blob', + disableSelector: "[hx-disable], [data-hx-disable]", + useTemplateFragments: false, + scrollBehavior: 'smooth', + defaultFocusScroll: false, + getCacheBusterParam: false, + globalViewTransitions: false, + methodsThatUseUrlParams: ["get"], + selfRequestsOnly: false, + scrollIntoViewOnBoost: true + }, + parseInterval:parseInterval, + _:internalEval, + createEventSource: function(url){ + return new EventSource(url, {withCredentials:true}) + }, + createWebSocket: function(url){ + var sock = new WebSocket(url, []); + sock.binaryType = htmx.config.wsBinaryType; + return sock; + }, + version: "1.9.7" + }; + + /** @type {import("./htmx").HtmxInternalApi} */ + var internalAPI = { + addTriggerHandler: addTriggerHandler, + bodyContains: bodyContains, + canAccessLocalStorage: canAccessLocalStorage, + findThisElement: findThisElement, + filterValues: filterValues, + hasAttribute: hasAttribute, + getAttributeValue: getAttributeValue, + getClosestAttributeValue: getClosestAttributeValue, + getClosestMatch: getClosestMatch, + getExpressionVars: getExpressionVars, + getHeaders: getHeaders, + getInputValues: getInputValues, + getInternalData: getInternalData, + getSwapSpecification: getSwapSpecification, + getTriggerSpecs: getTriggerSpecs, + getTarget: getTarget, + makeFragment: makeFragment, + mergeObjects: mergeObjects, + makeSettleInfo: makeSettleInfo, + oobSwap: oobSwap, + querySelectorExt: querySelectorExt, + selectAndSwap: selectAndSwap, + settleImmediately: settleImmediately, + shouldCancel: shouldCancel, + triggerEvent: triggerEvent, + triggerErrorEvent: triggerErrorEvent, + withExtensions: withExtensions, + } + + var VERBS = ['get', 'post', 'put', 'delete', 'patch']; + var VERB_SELECTOR = VERBS.map(function(verb){ + return "[hx-" + verb + "], [data-hx-" + verb + "]" + }).join(", "); + + //==================================================================== + // Utilities + //==================================================================== + + function parseInterval(str) { + if (str == undefined) { + return undefined + } + if (str.slice(-2) == "ms") { + return parseFloat(str.slice(0,-2)) || undefined + } + if (str.slice(-1) == "s") { + return (parseFloat(str.slice(0,-1)) * 1000) || undefined + } + if (str.slice(-1) == "m") { + return (parseFloat(str.slice(0,-1)) * 1000 * 60) || undefined + } + return parseFloat(str) || undefined + } + + /** + * @param {HTMLElement} elt + * @param {string} name + * @returns {(string | null)} + */ + function getRawAttribute(elt, name) { + return elt.getAttribute && elt.getAttribute(name); + } + + // resolve with both hx and data-hx prefixes + function hasAttribute(elt, qualifiedName) { + return elt.hasAttribute && (elt.hasAttribute(qualifiedName) || + elt.hasAttribute("data-" + qualifiedName)); + } + + /** + * + * @param {HTMLElement} elt + * @param {string} qualifiedName + * @returns {(string | null)} + */ + function getAttributeValue(elt, qualifiedName) { + return getRawAttribute(elt, qualifiedName) || getRawAttribute(elt, "data-" + qualifiedName); + } + + /** + * @param {HTMLElement} elt + * @returns {HTMLElement | null} + */ + function parentElt(elt) { + return elt.parentElement; + } + + /** + * @returns {Document} + */ + function getDocument() { + return document; + } + + /** + * @param {HTMLElement} elt + * @param {(e:HTMLElement) => boolean} condition + * @returns {HTMLElement | null} + */ + function getClosestMatch(elt, condition) { + while (elt && !condition(elt)) { + elt = parentElt(elt); + } + + return elt ? elt : null; + } + + function getAttributeValueWithDisinheritance(initialElement, ancestor, attributeName){ + var attributeValue = getAttributeValue(ancestor, attributeName); + var disinherit = getAttributeValue(ancestor, "hx-disinherit"); + if (initialElement !== ancestor && disinherit && (disinherit === "*" || disinherit.split(" ").indexOf(attributeName) >= 0)) { + return "unset"; + } else { + return attributeValue + } + } + + /** + * @param {HTMLElement} elt + * @param {string} attributeName + * @returns {string | null} + */ + function getClosestAttributeValue(elt, attributeName) { + var closestAttr = null; + getClosestMatch(elt, function (e) { + return closestAttr = getAttributeValueWithDisinheritance(elt, e, attributeName); + }); + if (closestAttr !== "unset") { + return closestAttr; + } + } + + /** + * @param {HTMLElement} elt + * @param {string} selector + * @returns {boolean} + */ + function matches(elt, selector) { + // @ts-ignore: non-standard properties for browser compatibility + // noinspection JSUnresolvedVariable + var matchesFunction = elt.matches || elt.matchesSelector || elt.msMatchesSelector || elt.mozMatchesSelector || elt.webkitMatchesSelector || elt.oMatchesSelector; + return matchesFunction && matchesFunction.call(elt, selector); + } + + /** + * @param {string} str + * @returns {string} + */ + function getStartTag(str) { + var tagMatcher = /<([a-z][^\/\0>\x20\t\r\n\f]*)/i + var match = tagMatcher.exec( str ); + if (match) { + return match[1].toLowerCase(); + } else { + return ""; + } + } + + /** + * + * @param {string} resp + * @param {number} depth + * @returns {Element} + */ + function parseHTML(resp, depth) { + var parser = new DOMParser(); + var responseDoc = parser.parseFromString(resp, "text/html"); + + /** @type {Element} */ + var responseNode = responseDoc.body; + while (depth > 0) { + depth--; + // @ts-ignore + responseNode = responseNode.firstChild; + } + if (responseNode == null) { + // @ts-ignore + responseNode = getDocument().createDocumentFragment(); + } + return responseNode; + } + + function aFullPageResponse(resp) { + return resp.match(/", 0); + // @ts-ignore type mismatch between DocumentFragment and Element. + // TODO: Are these close enough for htmx to use interchangeably? + return documentFragment.querySelector('template').content; + } else { + var startTag = getStartTag(resp); + switch (startTag) { + case "thead": + case "tbody": + case "tfoot": + case "colgroup": + case "caption": + return parseHTML("" + resp + "
    ", 1); + case "col": + return parseHTML("" + resp + "
    ", 2); + case "tr": + return parseHTML("" + resp + "
    ", 2); + case "td": + case "th": + return parseHTML("" + resp + "
    ", 3); + case "script": + case "style": + return parseHTML("
    " + resp + "
    ", 1); + default: + return parseHTML(resp, 0); + } + } + } + + /** + * @param {Function} func + */ + function maybeCall(func){ + if(func) { + func(); + } + } + + /** + * @param {any} o + * @param {string} type + * @returns + */ + function isType(o, type) { + return Object.prototype.toString.call(o) === "[object " + type + "]"; + } + + /** + * @param {*} o + * @returns {o is Function} + */ + function isFunction(o) { + return isType(o, "Function"); + } + + /** + * @param {*} o + * @returns {o is Object} + */ + function isRawObject(o) { + return isType(o, "Object"); + } + + /** + * getInternalData retrieves "private" data stored by htmx within an element + * @param {HTMLElement} elt + * @returns {*} + */ + function getInternalData(elt) { + var dataProp = 'htmx-internal-data'; + var data = elt[dataProp]; + if (!data) { + data = elt[dataProp] = {}; + } + return data; + } + + /** + * toArray converts an ArrayLike object into a real array. + * @param {ArrayLike} arr + * @returns {any[]} + */ + function toArray(arr) { + var returnArr = []; + if (arr) { + for (var i = 0; i < arr.length; i++) { + returnArr.push(arr[i]); + } + } + return returnArr + } + + function forEach(arr, func) { + if (arr) { + for (var i = 0; i < arr.length; i++) { + func(arr[i]); + } + } + } + + function isScrolledIntoView(el) { + var rect = el.getBoundingClientRect(); + var elemTop = rect.top; + var elemBottom = rect.bottom; + return elemTop < window.innerHeight && elemBottom >= 0; + } + + function bodyContains(elt) { + // IE Fix + if (elt.getRootNode && elt.getRootNode() instanceof window.ShadowRoot) { + return getDocument().body.contains(elt.getRootNode().host); + } else { + return getDocument().body.contains(elt); + } + } + + function splitOnWhitespace(trigger) { + return trigger.trim().split(/\s+/); + } + + /** + * mergeObjects takes all of the keys from + * obj2 and duplicates them into obj1 + * @param {Object} obj1 + * @param {Object} obj2 + * @returns {Object} + */ + function mergeObjects(obj1, obj2) { + for (var key in obj2) { + if (obj2.hasOwnProperty(key)) { + obj1[key] = obj2[key]; + } + } + return obj1; + } + + function parseJSON(jString) { + try { + return JSON.parse(jString); + } catch(error) { + logError(error); + return null; + } + } + + function canAccessLocalStorage() { + var test = 'htmx:localStorageTest'; + try { + localStorage.setItem(test, test); + localStorage.removeItem(test); + return true; + } catch(e) { + return false; + } + } + + function normalizePath(path) { + try { + var url = new URL(path); + if (url) { + path = url.pathname + url.search; + } + // remove trailing slash, unless index page + if (!path.match('^/$')) { + path = path.replace(/\/+$/, ''); + } + return path; + } catch (e) { + // be kind to IE11, which doesn't support URL() + return path; + } + } + + //========================================================================================== + // public API + //========================================================================================== + + function internalEval(str){ + return maybeEval(getDocument().body, function () { + return eval(str); + }); + } + + function onLoadHelper(callback) { + var value = htmx.on("htmx:load", function(evt) { + callback(evt.detail.elt); + }); + return value; + } + + function logAll(){ + htmx.logger = function(elt, event, data) { + if(console) { + console.log(event, elt, data); + } + } + } + + function logNone() { + htmx.logger = null + } + + function find(eltOrSelector, selector) { + if (selector) { + return eltOrSelector.querySelector(selector); + } else { + return find(getDocument(), eltOrSelector); + } + } + + function findAll(eltOrSelector, selector) { + if (selector) { + return eltOrSelector.querySelectorAll(selector); + } else { + return findAll(getDocument(), eltOrSelector); + } + } + + function removeElement(elt, delay) { + elt = resolveTarget(elt); + if (delay) { + setTimeout(function(){ + removeElement(elt); + elt = null; + }, delay); + } else { + elt.parentElement.removeChild(elt); + } + } + + function addClassToElement(elt, clazz, delay) { + elt = resolveTarget(elt); + if (delay) { + setTimeout(function(){ + addClassToElement(elt, clazz); + elt = null; + }, delay); + } else { + elt.classList && elt.classList.add(clazz); + } + } + + function removeClassFromElement(elt, clazz, delay) { + elt = resolveTarget(elt); + if (delay) { + setTimeout(function(){ + removeClassFromElement(elt, clazz); + elt = null; + }, delay); + } else { + if (elt.classList) { + elt.classList.remove(clazz); + // if there are no classes left, remove the class attribute + if (elt.classList.length === 0) { + elt.removeAttribute("class"); + } + } + } + } + + function toggleClassOnElement(elt, clazz) { + elt = resolveTarget(elt); + elt.classList.toggle(clazz); + } + + function takeClassForElement(elt, clazz) { + elt = resolveTarget(elt); + forEach(elt.parentElement.children, function(child){ + removeClassFromElement(child, clazz); + }) + addClassToElement(elt, clazz); + } + + function closest(elt, selector) { + elt = resolveTarget(elt); + if (elt.closest) { + return elt.closest(selector); + } else { + // TODO remove when IE goes away + do{ + if (elt == null || matches(elt, selector)){ + return elt; + } + } + while (elt = elt && parentElt(elt)); + return null; + } + } + + function startsWith(str, prefix) { + return str.substring(0, prefix.length) === prefix + } + + function endsWith(str, suffix) { + return str.substring(str.length - suffix.length) === suffix + } + + function normalizeSelector(selector) { + var trimmedSelector = selector.trim(); + if (startsWith(trimmedSelector, "<") && endsWith(trimmedSelector, "/>")) { + return trimmedSelector.substring(1, trimmedSelector.length - 2); + } else { + return trimmedSelector; + } + } + + function querySelectorAllExt(elt, selector) { + if (selector.indexOf("closest ") === 0) { + return [closest(elt, normalizeSelector(selector.substr(8)))]; + } else if (selector.indexOf("find ") === 0) { + return [find(elt, normalizeSelector(selector.substr(5)))]; + } else if (selector === "next") { + return [elt.nextElementSibling] + } else if (selector.indexOf("next ") === 0) { + return [scanForwardQuery(elt, normalizeSelector(selector.substr(5)))]; + } else if (selector === "previous") { + return [elt.previousElementSibling] + } else if (selector.indexOf("previous ") === 0) { + return [scanBackwardsQuery(elt, normalizeSelector(selector.substr(9)))]; + } else if (selector === 'document') { + return [document]; + } else if (selector === 'window') { + return [window]; + } else if (selector === 'body') { + return [document.body]; + } else { + return getDocument().querySelectorAll(normalizeSelector(selector)); + } + } + + var scanForwardQuery = function(start, match) { + var results = getDocument().querySelectorAll(match); + for (var i = 0; i < results.length; i++) { + var elt = results[i]; + if (elt.compareDocumentPosition(start) === Node.DOCUMENT_POSITION_PRECEDING) { + return elt; + } + } + } + + var scanBackwardsQuery = function(start, match) { + var results = getDocument().querySelectorAll(match); + for (var i = results.length - 1; i >= 0; i--) { + var elt = results[i]; + if (elt.compareDocumentPosition(start) === Node.DOCUMENT_POSITION_FOLLOWING) { + return elt; + } + } + } + + function querySelectorExt(eltOrSelector, selector) { + if (selector) { + return querySelectorAllExt(eltOrSelector, selector)[0]; + } else { + return querySelectorAllExt(getDocument().body, eltOrSelector)[0]; + } + } + + function resolveTarget(arg2) { + if (isType(arg2, 'String')) { + return find(arg2); + } else { + return arg2; + } + } + + function processEventArgs(arg1, arg2, arg3) { + if (isFunction(arg2)) { + return { + target: getDocument().body, + event: arg1, + listener: arg2 + } + } else { + return { + target: resolveTarget(arg1), + event: arg2, + listener: arg3 + } + } + + } + + function addEventListenerImpl(arg1, arg2, arg3) { + ready(function(){ + var eventArgs = processEventArgs(arg1, arg2, arg3); + eventArgs.target.addEventListener(eventArgs.event, eventArgs.listener); + }) + var b = isFunction(arg2); + return b ? arg2 : arg3; + } + + function removeEventListenerImpl(arg1, arg2, arg3) { + ready(function(){ + var eventArgs = processEventArgs(arg1, arg2, arg3); + eventArgs.target.removeEventListener(eventArgs.event, eventArgs.listener); + }) + return isFunction(arg2) ? arg2 : arg3; + } + + //==================================================================== + // Node processing + //==================================================================== + + var DUMMY_ELT = getDocument().createElement("output"); // dummy element for bad selectors + function findAttributeTargets(elt, attrName) { + var attrTarget = getClosestAttributeValue(elt, attrName); + if (attrTarget) { + if (attrTarget === "this") { + return [findThisElement(elt, attrName)]; + } else { + var result = querySelectorAllExt(elt, attrTarget); + if (result.length === 0) { + logError('The selector "' + attrTarget + '" on ' + attrName + " returned no matches!"); + return [DUMMY_ELT] + } else { + return result; + } + } + } + } + + function findThisElement(elt, attribute){ + return getClosestMatch(elt, function (elt) { + return getAttributeValue(elt, attribute) != null; + }) + } + + function getTarget(elt) { + var targetStr = getClosestAttributeValue(elt, "hx-target"); + if (targetStr) { + if (targetStr === "this") { + return findThisElement(elt,'hx-target'); + } else { + return querySelectorExt(elt, targetStr) + } + } else { + var data = getInternalData(elt); + if (data.boosted) { + return getDocument().body; + } else { + return elt; + } + } + } + + function shouldSettleAttribute(name) { + var attributesToSettle = htmx.config.attributesToSettle; + for (var i = 0; i < attributesToSettle.length; i++) { + if (name === attributesToSettle[i]) { + return true; + } + } + return false; + } + + function cloneAttributes(mergeTo, mergeFrom) { + forEach(mergeTo.attributes, function (attr) { + if (!mergeFrom.hasAttribute(attr.name) && shouldSettleAttribute(attr.name)) { + mergeTo.removeAttribute(attr.name) + } + }); + forEach(mergeFrom.attributes, function (attr) { + if (shouldSettleAttribute(attr.name)) { + mergeTo.setAttribute(attr.name, attr.value); + } + }); + } + + function isInlineSwap(swapStyle, target) { + var extensions = getExtensions(target); + for (var i = 0; i < extensions.length; i++) { + var extension = extensions[i]; + try { + if (extension.isInlineSwap(swapStyle)) { + return true; + } + } catch(e) { + logError(e); + } + } + return swapStyle === "outerHTML"; + } + + /** + * + * @param {string} oobValue + * @param {HTMLElement} oobElement + * @param {*} settleInfo + * @returns + */ + function oobSwap(oobValue, oobElement, settleInfo) { + var selector = "#" + getRawAttribute(oobElement, "id"); + var swapStyle = "outerHTML"; + if (oobValue === "true") { + // do nothing + } else if (oobValue.indexOf(":") > 0) { + swapStyle = oobValue.substr(0, oobValue.indexOf(":")); + selector = oobValue.substr(oobValue.indexOf(":") + 1, oobValue.length); + } else { + swapStyle = oobValue; + } + + var targets = getDocument().querySelectorAll(selector); + if (targets) { + forEach( + targets, + function (target) { + var fragment; + var oobElementClone = oobElement.cloneNode(true); + fragment = getDocument().createDocumentFragment(); + fragment.appendChild(oobElementClone); + if (!isInlineSwap(swapStyle, target)) { + fragment = oobElementClone; // if this is not an inline swap, we use the content of the node, not the node itself + } + + var beforeSwapDetails = {shouldSwap: true, target: target, fragment:fragment }; + if (!triggerEvent(target, 'htmx:oobBeforeSwap', beforeSwapDetails)) return; + + target = beforeSwapDetails.target; // allow re-targeting + if (beforeSwapDetails['shouldSwap']){ + swap(swapStyle, target, target, fragment, settleInfo); + } + forEach(settleInfo.elts, function (elt) { + triggerEvent(elt, 'htmx:oobAfterSwap', beforeSwapDetails); + }); + } + ); + oobElement.parentNode.removeChild(oobElement); + } else { + oobElement.parentNode.removeChild(oobElement); + triggerErrorEvent(getDocument().body, "htmx:oobErrorNoTarget", {content: oobElement}); + } + return oobValue; + } + + function handleOutOfBandSwaps(elt, fragment, settleInfo) { + var oobSelects = getClosestAttributeValue(elt, "hx-select-oob"); + if (oobSelects) { + var oobSelectValues = oobSelects.split(","); + for (let i = 0; i < oobSelectValues.length; i++) { + var oobSelectValue = oobSelectValues[i].split(":", 2); + var id = oobSelectValue[0].trim(); + if (id.indexOf("#") === 0) { + id = id.substring(1); + } + var oobValue = oobSelectValue[1] || "true"; + var oobElement = fragment.querySelector("#" + id); + if (oobElement) { + oobSwap(oobValue, oobElement, settleInfo); + } + } + } + forEach(findAll(fragment, '[hx-swap-oob], [data-hx-swap-oob]'), function (oobElement) { + var oobValue = getAttributeValue(oobElement, "hx-swap-oob"); + if (oobValue != null) { + oobSwap(oobValue, oobElement, settleInfo); + } + }); + } + + function handlePreservedElements(fragment) { + forEach(findAll(fragment, '[hx-preserve], [data-hx-preserve]'), function (preservedElt) { + var id = getAttributeValue(preservedElt, "id"); + var oldElt = getDocument().getElementById(id); + if (oldElt != null) { + preservedElt.parentNode.replaceChild(oldElt, preservedElt); + } + }); + } + + function handleAttributes(parentNode, fragment, settleInfo) { + forEach(fragment.querySelectorAll("[id]"), function (newNode) { + var id = getRawAttribute(newNode, "id") + if (id && id.length > 0) { + var normalizedId = id.replace("'", "\\'"); + var normalizedTag = newNode.tagName.replace(':', '\\:'); + var oldNode = parentNode.querySelector(normalizedTag + "[id='" + normalizedId + "']"); + if (oldNode && oldNode !== parentNode) { + var newAttributes = newNode.cloneNode(); + cloneAttributes(newNode, oldNode); + settleInfo.tasks.push(function () { + cloneAttributes(newNode, newAttributes); + }); + } + } + }); + } + + function makeAjaxLoadTask(child) { + return function () { + removeClassFromElement(child, htmx.config.addedClass); + processNode(child); + processScripts(child); + processFocus(child) + triggerEvent(child, 'htmx:load'); + }; + } + + function processFocus(child) { + var autofocus = "[autofocus]"; + var autoFocusedElt = matches(child, autofocus) ? child : child.querySelector(autofocus) + if (autoFocusedElt != null) { + autoFocusedElt.focus(); + } + } + + function insertNodesBefore(parentNode, insertBefore, fragment, settleInfo) { + handleAttributes(parentNode, fragment, settleInfo); + while(fragment.childNodes.length > 0){ + var child = fragment.firstChild; + addClassToElement(child, htmx.config.addedClass); + parentNode.insertBefore(child, insertBefore); + if (child.nodeType !== Node.TEXT_NODE && child.nodeType !== Node.COMMENT_NODE) { + settleInfo.tasks.push(makeAjaxLoadTask(child)); + } + } + } + + // based on https://gist.github.com/hyamamoto/fd435505d29ebfa3d9716fd2be8d42f0, + // derived from Java's string hashcode implementation + function stringHash(string, hash) { + var char = 0; + while (char < string.length){ + hash = (hash << 5) - hash + string.charCodeAt(char++) | 0; // bitwise or ensures we have a 32-bit int + } + return hash; + } + + function attributeHash(elt) { + var hash = 0; + // IE fix + if (elt.attributes) { + for (var i = 0; i < elt.attributes.length; i++) { + var attribute = elt.attributes[i]; + if(attribute.value){ // only include attributes w/ actual values (empty is same as non-existent) + hash = stringHash(attribute.name, hash); + hash = stringHash(attribute.value, hash); + } + } + } + return hash; + } + + function deInitOnHandlers(elt) { + var internalData = getInternalData(elt); + if (internalData.onHandlers) { + for (let i = 0; i < internalData.onHandlers.length; i++) { + const handlerInfo = internalData.onHandlers[i]; + elt.removeEventListener(handlerInfo.event, handlerInfo.listener); + } + delete internalData.onHandlers + } + } + + function deInitNode(element) { + var internalData = getInternalData(element); + if (internalData.timeout) { + clearTimeout(internalData.timeout); + } + if (internalData.webSocket) { + internalData.webSocket.close(); + } + if (internalData.sseEventSource) { + internalData.sseEventSource.close(); + } + if (internalData.listenerInfos) { + forEach(internalData.listenerInfos, function (info) { + if (info.on) { + info.on.removeEventListener(info.trigger, info.listener); + } + }); + } + if (internalData.initHash) { + internalData.initHash = null + } + deInitOnHandlers(element); + } + + function cleanUpElement(element) { + triggerEvent(element, "htmx:beforeCleanupElement") + deInitNode(element); + if (element.children) { // IE + forEach(element.children, function(child) { cleanUpElement(child) }); + } + } + + function swapOuterHTML(target, fragment, settleInfo) { + if (target.tagName === "BODY") { + return swapInnerHTML(target, fragment, settleInfo); + } else { + // @type {HTMLElement} + var newElt + var eltBeforeNewContent = target.previousSibling; + insertNodesBefore(parentElt(target), target, fragment, settleInfo); + if (eltBeforeNewContent == null) { + newElt = parentElt(target).firstChild; + } else { + newElt = eltBeforeNewContent.nextSibling; + } + getInternalData(target).replacedWith = newElt; // tuck away so we can fire events on it later + settleInfo.elts = settleInfo.elts.filter(function(e) { return e != target }); + while(newElt && newElt !== target) { + if (newElt.nodeType === Node.ELEMENT_NODE) { + settleInfo.elts.push(newElt); + } + newElt = newElt.nextElementSibling; + } + cleanUpElement(target); + parentElt(target).removeChild(target); + } + } + + function swapAfterBegin(target, fragment, settleInfo) { + return insertNodesBefore(target, target.firstChild, fragment, settleInfo); + } + + function swapBeforeBegin(target, fragment, settleInfo) { + return insertNodesBefore(parentElt(target), target, fragment, settleInfo); + } + + function swapBeforeEnd(target, fragment, settleInfo) { + return insertNodesBefore(target, null, fragment, settleInfo); + } + + function swapAfterEnd(target, fragment, settleInfo) { + return insertNodesBefore(parentElt(target), target.nextSibling, fragment, settleInfo); + } + function swapDelete(target, fragment, settleInfo) { + cleanUpElement(target); + return parentElt(target).removeChild(target); + } + + function swapInnerHTML(target, fragment, settleInfo) { + var firstChild = target.firstChild; + insertNodesBefore(target, firstChild, fragment, settleInfo); + if (firstChild) { + while (firstChild.nextSibling) { + cleanUpElement(firstChild.nextSibling) + target.removeChild(firstChild.nextSibling); + } + cleanUpElement(firstChild) + target.removeChild(firstChild); + } + } + + function maybeSelectFromResponse(elt, fragment, selectOverride) { + var selector = selectOverride || getClosestAttributeValue(elt, "hx-select"); + if (selector) { + var newFragment = getDocument().createDocumentFragment(); + forEach(fragment.querySelectorAll(selector), function (node) { + newFragment.appendChild(node); + }); + fragment = newFragment; + } + return fragment; + } + + function swap(swapStyle, elt, target, fragment, settleInfo) { + switch (swapStyle) { + case "none": + return; + case "outerHTML": + swapOuterHTML(target, fragment, settleInfo); + return; + case "afterbegin": + swapAfterBegin(target, fragment, settleInfo); + return; + case "beforebegin": + swapBeforeBegin(target, fragment, settleInfo); + return; + case "beforeend": + swapBeforeEnd(target, fragment, settleInfo); + return; + case "afterend": + swapAfterEnd(target, fragment, settleInfo); + return; + case "delete": + swapDelete(target, fragment, settleInfo); + return; + default: + var extensions = getExtensions(elt); + for (var i = 0; i < extensions.length; i++) { + var ext = extensions[i]; + try { + var newElements = ext.handleSwap(swapStyle, target, fragment, settleInfo); + if (newElements) { + if (typeof newElements.length !== 'undefined') { + // if handleSwap returns an array (like) of elements, we handle them + for (var j = 0; j < newElements.length; j++) { + var child = newElements[j]; + if (child.nodeType !== Node.TEXT_NODE && child.nodeType !== Node.COMMENT_NODE) { + settleInfo.tasks.push(makeAjaxLoadTask(child)); + } + } + } + return; + } + } catch (e) { + logError(e); + } + } + if (swapStyle === "innerHTML") { + swapInnerHTML(target, fragment, settleInfo); + } else { + swap(htmx.config.defaultSwapStyle, elt, target, fragment, settleInfo); + } + } + } + + function findTitle(content) { + if (content.indexOf(' -1) { + var contentWithSvgsRemoved = content.replace(/]*>|>)([\s\S]*?)<\/svg>/gim, ''); + var result = contentWithSvgsRemoved.match(/]*>|>)([\s\S]*?)<\/title>/im); + + if (result) { + return result[2]; + } + } + } + + function selectAndSwap(swapStyle, target, elt, responseText, settleInfo, selectOverride) { + settleInfo.title = findTitle(responseText); + var fragment = makeFragment(responseText); + if (fragment) { + handleOutOfBandSwaps(elt, fragment, settleInfo); + fragment = maybeSelectFromResponse(elt, fragment, selectOverride); + handlePreservedElements(fragment); + return swap(swapStyle, elt, target, fragment, settleInfo); + } + } + + function handleTrigger(xhr, header, elt) { + var triggerBody = xhr.getResponseHeader(header); + if (triggerBody.indexOf("{") === 0) { + var triggers = parseJSON(triggerBody); + for (var eventName in triggers) { + if (triggers.hasOwnProperty(eventName)) { + var detail = triggers[eventName]; + if (!isRawObject(detail)) { + detail = {"value": detail} + } + triggerEvent(elt, eventName, detail); + } + } + } else { + var eventNames = triggerBody.split(",") + for (var i = 0; i < eventNames.length; i++) { + triggerEvent(elt, eventNames[i].trim(), []); + } + } + } + + var WHITESPACE = /\s/; + var WHITESPACE_OR_COMMA = /[\s,]/; + var SYMBOL_START = /[_$a-zA-Z]/; + var SYMBOL_CONT = /[_$a-zA-Z0-9]/; + var STRINGISH_START = ['"', "'", "/"]; + var NOT_WHITESPACE = /[^\s]/; + function tokenizeString(str) { + var tokens = []; + var position = 0; + while (position < str.length) { + if(SYMBOL_START.exec(str.charAt(position))) { + var startPosition = position; + while (SYMBOL_CONT.exec(str.charAt(position + 1))) { + position++; + } + tokens.push(str.substr(startPosition, position - startPosition + 1)); + } else if (STRINGISH_START.indexOf(str.charAt(position)) !== -1) { + var startChar = str.charAt(position); + var startPosition = position; + position++; + while (position < str.length && str.charAt(position) !== startChar ) { + if (str.charAt(position) === "\\") { + position++; + } + position++; + } + tokens.push(str.substr(startPosition, position - startPosition + 1)); + } else { + var symbol = str.charAt(position); + tokens.push(symbol); + } + position++; + } + return tokens; + } + + function isPossibleRelativeReference(token, last, paramName) { + return SYMBOL_START.exec(token.charAt(0)) && + token !== "true" && + token !== "false" && + token !== "this" && + token !== paramName && + last !== "."; + } + + function maybeGenerateConditional(elt, tokens, paramName) { + if (tokens[0] === '[') { + tokens.shift(); + var bracketCount = 1; + var conditionalSource = " return (function(" + paramName + "){ return ("; + var last = null; + while (tokens.length > 0) { + var token = tokens[0]; + if (token === "]") { + bracketCount--; + if (bracketCount === 0) { + if (last === null) { + conditionalSource = conditionalSource + "true"; + } + tokens.shift(); + conditionalSource += ")})"; + try { + var conditionFunction = maybeEval(elt,function () { + return Function(conditionalSource)(); + }, + function(){return true}) + conditionFunction.source = conditionalSource; + return conditionFunction; + } catch (e) { + triggerErrorEvent(getDocument().body, "htmx:syntax:error", {error:e, source:conditionalSource}) + return null; + } + } + } else if (token === "[") { + bracketCount++; + } + if (isPossibleRelativeReference(token, last, paramName)) { + conditionalSource += "((" + paramName + "." + token + ") ? (" + paramName + "." + token + ") : (window." + token + "))"; + } else { + conditionalSource = conditionalSource + token; + } + last = tokens.shift(); + } + } + } + + function consumeUntil(tokens, match) { + var result = ""; + while (tokens.length > 0 && !tokens[0].match(match)) { + result += tokens.shift(); + } + return result; + } + + var INPUT_SELECTOR = 'input, textarea, select'; + + /** + * @param {HTMLElement} elt + * @returns {import("./htmx").HtmxTriggerSpecification[]} + */ + function getTriggerSpecs(elt) { + var explicitTrigger = getAttributeValue(elt, 'hx-trigger'); + var triggerSpecs = []; + if (explicitTrigger) { + var tokens = tokenizeString(explicitTrigger); + do { + consumeUntil(tokens, NOT_WHITESPACE); + var initialLength = tokens.length; + var trigger = consumeUntil(tokens, /[,\[\s]/); + if (trigger !== "") { + if (trigger === "every") { + var every = {trigger: 'every'}; + consumeUntil(tokens, NOT_WHITESPACE); + every.pollInterval = parseInterval(consumeUntil(tokens, /[,\[\s]/)); + consumeUntil(tokens, NOT_WHITESPACE); + var eventFilter = maybeGenerateConditional(elt, tokens, "event"); + if (eventFilter) { + every.eventFilter = eventFilter; + } + triggerSpecs.push(every); + } else if (trigger.indexOf("sse:") === 0) { + triggerSpecs.push({trigger: 'sse', sseEvent: trigger.substr(4)}); + } else { + var triggerSpec = {trigger: trigger}; + var eventFilter = maybeGenerateConditional(elt, tokens, "event"); + if (eventFilter) { + triggerSpec.eventFilter = eventFilter; + } + while (tokens.length > 0 && tokens[0] !== ",") { + consumeUntil(tokens, NOT_WHITESPACE) + var token = tokens.shift(); + if (token === "changed") { + triggerSpec.changed = true; + } else if (token === "once") { + triggerSpec.once = true; + } else if (token === "consume") { + triggerSpec.consume = true; + } else if (token === "delay" && tokens[0] === ":") { + tokens.shift(); + triggerSpec.delay = parseInterval(consumeUntil(tokens, WHITESPACE_OR_COMMA)); + } else if (token === "from" && tokens[0] === ":") { + tokens.shift(); + var from_arg = consumeUntil(tokens, WHITESPACE_OR_COMMA); + if (from_arg === "closest" || from_arg === "find" || from_arg === "next" || from_arg === "previous") { + tokens.shift(); + var selector = consumeUntil( + tokens, + WHITESPACE_OR_COMMA + ) + // `next` and `previous` allow a selector-less syntax + if (selector.length > 0) { + from_arg += " " + selector; + } + } + triggerSpec.from = from_arg; + } else if (token === "target" && tokens[0] === ":") { + tokens.shift(); + triggerSpec.target = consumeUntil(tokens, WHITESPACE_OR_COMMA); + } else if (token === "throttle" && tokens[0] === ":") { + tokens.shift(); + triggerSpec.throttle = parseInterval(consumeUntil(tokens, WHITESPACE_OR_COMMA)); + } else if (token === "queue" && tokens[0] === ":") { + tokens.shift(); + triggerSpec.queue = consumeUntil(tokens, WHITESPACE_OR_COMMA); + } else if ((token === "root" || token === "threshold") && tokens[0] === ":") { + tokens.shift(); + triggerSpec[token] = consumeUntil(tokens, WHITESPACE_OR_COMMA); + } else { + triggerErrorEvent(elt, "htmx:syntax:error", {token:tokens.shift()}); + } + } + triggerSpecs.push(triggerSpec); + } + } + if (tokens.length === initialLength) { + triggerErrorEvent(elt, "htmx:syntax:error", {token:tokens.shift()}); + } + consumeUntil(tokens, NOT_WHITESPACE); + } while (tokens[0] === "," && tokens.shift()) + } + + if (triggerSpecs.length > 0) { + return triggerSpecs; + } else if (matches(elt, 'form')) { + return [{trigger: 'submit'}]; + } else if (matches(elt, 'input[type="button"], input[type="submit"]')){ + return [{trigger: 'click'}]; + } else if (matches(elt, INPUT_SELECTOR)) { + return [{trigger: 'change'}]; + } else { + return [{trigger: 'click'}]; + } + } + + function cancelPolling(elt) { + getInternalData(elt).cancelled = true; + } + + function processPolling(elt, handler, spec) { + var nodeData = getInternalData(elt); + nodeData.timeout = setTimeout(function () { + if (bodyContains(elt) && nodeData.cancelled !== true) { + if (!maybeFilterEvent(spec, elt, makeEvent('hx:poll:trigger', { + triggerSpec: spec, + target: elt + }))) { + handler(elt); + } + processPolling(elt, handler, spec); + } + }, spec.pollInterval); + } + + function isLocalLink(elt) { + return location.hostname === elt.hostname && + getRawAttribute(elt,'href') && + getRawAttribute(elt,'href').indexOf("#") !== 0; + } + + function boostElement(elt, nodeData, triggerSpecs) { + if ((elt.tagName === "A" && isLocalLink(elt) && (elt.target === "" || elt.target === "_self")) || elt.tagName === "FORM") { + nodeData.boosted = true; + var verb, path; + if (elt.tagName === "A") { + verb = "get"; + path = getRawAttribute(elt, 'href') + } else { + var rawAttribute = getRawAttribute(elt, "method"); + verb = rawAttribute ? rawAttribute.toLowerCase() : "get"; + if (verb === "get") { + } + path = getRawAttribute(elt, 'action'); + } + triggerSpecs.forEach(function(triggerSpec) { + addEventListener(elt, function(elt, evt) { + if (closest(elt, htmx.config.disableSelector)) { + cleanUpElement(elt) + return + } + issueAjaxRequest(verb, path, elt, evt) + }, nodeData, triggerSpec, true); + }); + } + } + + /** + * + * @param {Event} evt + * @param {HTMLElement} elt + * @returns + */ + function shouldCancel(evt, elt) { + if (evt.type === "submit" || evt.type === "click") { + if (elt.tagName === "FORM") { + return true; + } + if (matches(elt, 'input[type="submit"], button') && closest(elt, 'form') !== null) { + return true; + } + if (elt.tagName === "A" && elt.href && + (elt.getAttribute('href') === '#' || elt.getAttribute('href').indexOf("#") !== 0)) { + return true; + } + } + return false; + } + + function ignoreBoostedAnchorCtrlClick(elt, evt) { + return getInternalData(elt).boosted && elt.tagName === "A" && evt.type === "click" && (evt.ctrlKey || evt.metaKey); + } + + function maybeFilterEvent(triggerSpec, elt, evt) { + var eventFilter = triggerSpec.eventFilter; + if(eventFilter){ + try { + return eventFilter.call(elt, evt) !== true; + } catch(e) { + triggerErrorEvent(getDocument().body, "htmx:eventFilter:error", {error: e, source:eventFilter.source}); + return true; + } + } + return false; + } + + function addEventListener(elt, handler, nodeData, triggerSpec, explicitCancel) { + var elementData = getInternalData(elt); + var eltsToListenOn; + if (triggerSpec.from) { + eltsToListenOn = querySelectorAllExt(elt, triggerSpec.from); + } else { + eltsToListenOn = [elt]; + } + // store the initial values of the elements, so we can tell if they change + if (triggerSpec.changed) { + eltsToListenOn.forEach(function (eltToListenOn) { + var eltToListenOnData = getInternalData(eltToListenOn); + eltToListenOnData.lastValue = eltToListenOn.value; + }) + } + forEach(eltsToListenOn, function (eltToListenOn) { + var eventListener = function (evt) { + if (!bodyContains(elt)) { + eltToListenOn.removeEventListener(triggerSpec.trigger, eventListener); + return; + } + if (ignoreBoostedAnchorCtrlClick(elt, evt)) { + return; + } + if (explicitCancel || shouldCancel(evt, elt)) { + evt.preventDefault(); + } + if (maybeFilterEvent(triggerSpec, elt, evt)) { + return; + } + var eventData = getInternalData(evt); + eventData.triggerSpec = triggerSpec; + if (eventData.handledFor == null) { + eventData.handledFor = []; + } + if (eventData.handledFor.indexOf(elt) < 0) { + eventData.handledFor.push(elt); + if (triggerSpec.consume) { + evt.stopPropagation(); + } + if (triggerSpec.target && evt.target) { + if (!matches(evt.target, triggerSpec.target)) { + return; + } + } + if (triggerSpec.once) { + if (elementData.triggeredOnce) { + return; + } else { + elementData.triggeredOnce = true; + } + } + if (triggerSpec.changed) { + var eltToListenOnData = getInternalData(eltToListenOn) + if (eltToListenOnData.lastValue === eltToListenOn.value) { + return; + } + eltToListenOnData.lastValue = eltToListenOn.value + } + if (elementData.delayed) { + clearTimeout(elementData.delayed); + } + if (elementData.throttle) { + return; + } + + if (triggerSpec.throttle) { + if (!elementData.throttle) { + handler(elt, evt); + elementData.throttle = setTimeout(function () { + elementData.throttle = null; + }, triggerSpec.throttle); + } + } else if (triggerSpec.delay) { + elementData.delayed = setTimeout(function() { handler(elt, evt) }, triggerSpec.delay); + } else { + triggerEvent(elt, 'htmx:trigger') + handler(elt, evt); + } + } + }; + if (nodeData.listenerInfos == null) { + nodeData.listenerInfos = []; + } + nodeData.listenerInfos.push({ + trigger: triggerSpec.trigger, + listener: eventListener, + on: eltToListenOn + }) + eltToListenOn.addEventListener(triggerSpec.trigger, eventListener); + }); + } + + var windowIsScrolling = false // used by initScrollHandler + var scrollHandler = null; + function initScrollHandler() { + if (!scrollHandler) { + scrollHandler = function() { + windowIsScrolling = true + }; + window.addEventListener("scroll", scrollHandler) + setInterval(function() { + if (windowIsScrolling) { + windowIsScrolling = false; + forEach(getDocument().querySelectorAll("[hx-trigger='revealed'],[data-hx-trigger='revealed']"), function (elt) { + maybeReveal(elt); + }) + } + }, 200); + } + } + + function maybeReveal(elt) { + if (!hasAttribute(elt,'data-hx-revealed') && isScrolledIntoView(elt)) { + elt.setAttribute('data-hx-revealed', 'true'); + var nodeData = getInternalData(elt); + if (nodeData.initHash) { + triggerEvent(elt, 'revealed'); + } else { + // if the node isn't initialized, wait for it before triggering the request + elt.addEventListener("htmx:afterProcessNode", function(evt) { triggerEvent(elt, 'revealed') }, {once: true}); + } + } + } + + //==================================================================== + // Web Sockets + //==================================================================== + + function processWebSocketInfo(elt, nodeData, info) { + var values = splitOnWhitespace(info); + for (var i = 0; i < values.length; i++) { + var value = values[i].split(/:(.+)/); + if (value[0] === "connect") { + ensureWebSocket(elt, value[1], 0); + } + if (value[0] === "send") { + processWebSocketSend(elt); + } + } + } + + function ensureWebSocket(elt, wssSource, retryCount) { + if (!bodyContains(elt)) { + return; // stop ensuring websocket connection when socket bearing element ceases to exist + } + + if (wssSource.indexOf("/") == 0) { // complete absolute paths only + var base_part = location.hostname + (location.port ? ':'+location.port: ''); + if (location.protocol == 'https:') { + wssSource = "wss://" + base_part + wssSource; + } else if (location.protocol == 'http:') { + wssSource = "ws://" + base_part + wssSource; + } + } + var socket = htmx.createWebSocket(wssSource); + socket.onerror = function (e) { + triggerErrorEvent(elt, "htmx:wsError", {error:e, socket:socket}); + maybeCloseWebSocketSource(elt); + }; + + socket.onclose = function (e) { + if ([1006, 1012, 1013].indexOf(e.code) >= 0) { // Abnormal Closure/Service Restart/Try Again Later + var delay = getWebSocketReconnectDelay(retryCount); + setTimeout(function() { + ensureWebSocket(elt, wssSource, retryCount+1); // creates a websocket with a new timeout + }, delay); + } + }; + socket.onopen = function (e) { + retryCount = 0; + } + + getInternalData(elt).webSocket = socket; + socket.addEventListener('message', function (event) { + if (maybeCloseWebSocketSource(elt)) { + return; + } + + var response = event.data; + withExtensions(elt, function(extension){ + response = extension.transformResponse(response, null, elt); + }); + + var settleInfo = makeSettleInfo(elt); + var fragment = makeFragment(response); + var children = toArray(fragment.children); + for (var i = 0; i < children.length; i++) { + var child = children[i]; + oobSwap(getAttributeValue(child, "hx-swap-oob") || "true", child, settleInfo); + } + + settleImmediately(settleInfo.tasks); + }); + } + + function maybeCloseWebSocketSource(elt) { + if (!bodyContains(elt)) { + getInternalData(elt).webSocket.close(); + return true; + } + } + + function processWebSocketSend(elt) { + var webSocketSourceElt = getClosestMatch(elt, function (parent) { + return getInternalData(parent).webSocket != null; + }); + if (webSocketSourceElt) { + elt.addEventListener(getTriggerSpecs(elt)[0].trigger, function (evt) { + var webSocket = getInternalData(webSocketSourceElt).webSocket; + var headers = getHeaders(elt, webSocketSourceElt); + var results = getInputValues(elt, 'post'); + var errors = results.errors; + var rawParameters = results.values; + var expressionVars = getExpressionVars(elt); + var allParameters = mergeObjects(rawParameters, expressionVars); + var filteredParameters = filterValues(allParameters, elt); + filteredParameters['HEADERS'] = headers; + if (errors && errors.length > 0) { + triggerEvent(elt, 'htmx:validation:halted', errors); + return; + } + webSocket.send(JSON.stringify(filteredParameters)); + if(shouldCancel(evt, elt)){ + evt.preventDefault(); + } + }); + } else { + triggerErrorEvent(elt, "htmx:noWebSocketSourceError"); + } + } + + function getWebSocketReconnectDelay(retryCount) { + var delay = htmx.config.wsReconnectDelay; + if (typeof delay === 'function') { + // @ts-ignore + return delay(retryCount); + } + if (delay === 'full-jitter') { + var exp = Math.min(retryCount, 6); + var maxDelay = 1000 * Math.pow(2, exp); + return maxDelay * Math.random(); + } + logError('htmx.config.wsReconnectDelay must either be a function or the string "full-jitter"'); + } + + //==================================================================== + // Server Sent Events + //==================================================================== + + function processSSEInfo(elt, nodeData, info) { + var values = splitOnWhitespace(info); + for (var i = 0; i < values.length; i++) { + var value = values[i].split(/:(.+)/); + if (value[0] === "connect") { + processSSESource(elt, value[1]); + } + + if ((value[0] === "swap")) { + processSSESwap(elt, value[1]) + } + } + } + + function processSSESource(elt, sseSrc) { + var source = htmx.createEventSource(sseSrc); + source.onerror = function (e) { + triggerErrorEvent(elt, "htmx:sseError", {error:e, source:source}); + maybeCloseSSESource(elt); + }; + getInternalData(elt).sseEventSource = source; + } + + function processSSESwap(elt, sseEventName) { + var sseSourceElt = getClosestMatch(elt, hasEventSource); + if (sseSourceElt) { + var sseEventSource = getInternalData(sseSourceElt).sseEventSource; + var sseListener = function (event) { + if (maybeCloseSSESource(sseSourceElt)) { + return; + } + if (!bodyContains(elt)) { + sseEventSource.removeEventListener(sseEventName, sseListener); + return; + } + + /////////////////////////// + // TODO: merge this code with AJAX and WebSockets code in the future. + + var response = event.data; + withExtensions(elt, function(extension){ + response = extension.transformResponse(response, null, elt); + }); + + var swapSpec = getSwapSpecification(elt) + var target = getTarget(elt) + var settleInfo = makeSettleInfo(elt); + + selectAndSwap(swapSpec.swapStyle, target, elt, response, settleInfo) + settleImmediately(settleInfo.tasks) + triggerEvent(elt, "htmx:sseMessage", event) + }; + + getInternalData(elt).sseListener = sseListener; + sseEventSource.addEventListener(sseEventName, sseListener); + } else { + triggerErrorEvent(elt, "htmx:noSSESourceError"); + } + } + + function processSSETrigger(elt, handler, sseEventName) { + var sseSourceElt = getClosestMatch(elt, hasEventSource); + if (sseSourceElt) { + var sseEventSource = getInternalData(sseSourceElt).sseEventSource; + var sseListener = function () { + if (!maybeCloseSSESource(sseSourceElt)) { + if (bodyContains(elt)) { + handler(elt); + } else { + sseEventSource.removeEventListener(sseEventName, sseListener); + } + } + }; + getInternalData(elt).sseListener = sseListener; + sseEventSource.addEventListener(sseEventName, sseListener); + } else { + triggerErrorEvent(elt, "htmx:noSSESourceError"); + } + } + + function maybeCloseSSESource(elt) { + if (!bodyContains(elt)) { + getInternalData(elt).sseEventSource.close(); + return true; + } + } + + function hasEventSource(node) { + return getInternalData(node).sseEventSource != null; + } + + //==================================================================== + + function loadImmediately(elt, handler, nodeData, delay) { + var load = function(){ + if (!nodeData.loaded) { + nodeData.loaded = true; + handler(elt); + } + } + if (delay) { + setTimeout(load, delay); + } else { + load(); + } + } + + function processVerbs(elt, nodeData, triggerSpecs) { + var explicitAction = false; + forEach(VERBS, function (verb) { + if (hasAttribute(elt,'hx-' + verb)) { + var path = getAttributeValue(elt, 'hx-' + verb); + explicitAction = true; + nodeData.path = path; + nodeData.verb = verb; + triggerSpecs.forEach(function(triggerSpec) { + addTriggerHandler(elt, triggerSpec, nodeData, function (elt, evt) { + if (closest(elt, htmx.config.disableSelector)) { + cleanUpElement(elt) + return + } + issueAjaxRequest(verb, path, elt, evt) + }) + }); + } + }); + return explicitAction; + } + + function addTriggerHandler(elt, triggerSpec, nodeData, handler) { + if (triggerSpec.sseEvent) { + processSSETrigger(elt, handler, triggerSpec.sseEvent); + } else if (triggerSpec.trigger === "revealed") { + initScrollHandler(); + addEventListener(elt, handler, nodeData, triggerSpec); + maybeReveal(elt); + } else if (triggerSpec.trigger === "intersect") { + var observerOptions = {}; + if (triggerSpec.root) { + observerOptions.root = querySelectorExt(elt, triggerSpec.root) + } + if (triggerSpec.threshold) { + observerOptions.threshold = parseFloat(triggerSpec.threshold); + } + var observer = new IntersectionObserver(function (entries) { + for (var i = 0; i < entries.length; i++) { + var entry = entries[i]; + if (entry.isIntersecting) { + triggerEvent(elt, "intersect"); + break; + } + } + }, observerOptions); + observer.observe(elt); + addEventListener(elt, handler, nodeData, triggerSpec); + } else if (triggerSpec.trigger === "load") { + if (!maybeFilterEvent(triggerSpec, elt, makeEvent("load", {elt: elt}))) { + loadImmediately(elt, handler, nodeData, triggerSpec.delay); + } + } else if (triggerSpec.pollInterval) { + nodeData.polling = true; + processPolling(elt, handler, triggerSpec); + } else { + addEventListener(elt, handler, nodeData, triggerSpec); + } + } + + function evalScript(script) { + if (htmx.config.allowScriptTags && (script.type === "text/javascript" || script.type === "module" || script.type === "") ) { + var newScript = getDocument().createElement("script"); + forEach(script.attributes, function (attr) { + newScript.setAttribute(attr.name, attr.value); + }); + newScript.textContent = script.textContent; + newScript.async = false; + if (htmx.config.inlineScriptNonce) { + newScript.nonce = htmx.config.inlineScriptNonce; + } + var parent = script.parentElement; + + try { + parent.insertBefore(newScript, script); + } catch (e) { + logError(e); + } finally { + // remove old script element, but only if it is still in DOM + if (script.parentElement) { + script.parentElement.removeChild(script); + } + } + } + } + + function processScripts(elt) { + if (matches(elt, "script")) { + evalScript(elt); + } + forEach(findAll(elt, "script"), function (script) { + evalScript(script); + }); + } + + function hasChanceOfBeingBoosted() { + return document.querySelector("[hx-boost], [data-hx-boost]"); + } + + function findHxOnWildcardElements(elt) { + var node = null + var elements = [] + + if (document.evaluate) { + var iter = document.evaluate('//*[@*[ starts-with(name(), "hx-on:") or starts-with(name(), "data-hx-on:") ]]', elt) + while (node = iter.iterateNext()) elements.push(node) + } else { + var allElements = document.getElementsByTagName("*") + for (var i = 0; i < allElements.length; i++) { + var attributes = allElements[i].attributes + for (var j = 0; j < attributes.length; j++) { + var attrName = attributes[j].name + if (startsWith(attrName, "hx-on:") || startsWith(attrName, "data-hx-on:")) { + elements.push(allElements[i]) + } + } + } + } + + return elements + } + + function findElementsToProcess(elt) { + if (elt.querySelectorAll) { + var boostedElts = hasChanceOfBeingBoosted() ? ", a" : ""; + var results = elt.querySelectorAll(VERB_SELECTOR + boostedElts + ", form, [type='submit'], [hx-sse], [data-hx-sse], [hx-ws]," + + " [data-hx-ws], [hx-ext], [data-hx-ext], [hx-trigger], [data-hx-trigger], [hx-on], [data-hx-on]"); + return results; + } else { + return []; + } + } + + // Handle submit buttons/inputs that have the form attribute set + // see https://developer.mozilla.org/docs/Web/HTML/Element/button + function maybeSetLastButtonClicked(evt) { + var elt = closest(evt.target, "button, input[type='submit']"); + var internalData = getRelatedFormData(evt) + if (internalData) { + internalData.lastButtonClicked = elt; + } + }; + function maybeUnsetLastButtonClicked(evt){ + var internalData = getRelatedFormData(evt) + if (internalData) { + internalData.lastButtonClicked = null; + } + } + function getRelatedFormData(evt) { + var elt = closest(evt.target, "button, input[type='submit']"); + if (!elt) { + return; + } + var form = resolveTarget('#' + getRawAttribute(elt, 'form')) || closest(elt, 'form'); + if (!form) { + return; + } + return getInternalData(form); + } + function initButtonTracking(elt) { + // need to handle both click and focus in: + // focusin - in case someone tabs in to a button and hits the space bar + // click - on OSX buttons do not focus on click see https://bugs.webkit.org/show_bug.cgi?id=13724 + elt.addEventListener('click', maybeSetLastButtonClicked) + elt.addEventListener('focusin', maybeSetLastButtonClicked) + elt.addEventListener('focusout', maybeUnsetLastButtonClicked) + } + + function countCurlies(line) { + var tokens = tokenizeString(line); + var netCurlies = 0; + for (let i = 0; i < tokens.length; i++) { + const token = tokens[i]; + if (token === "{") { + netCurlies++; + } else if (token === "}") { + netCurlies--; + } + } + return netCurlies; + } + + function addHxOnEventHandler(elt, eventName, code) { + var nodeData = getInternalData(elt); + if (!Array.isArray(nodeData.onHandlers)) { + nodeData.onHandlers = []; + } + var func; + var listener = function (e) { + return maybeEval(elt, function() { + if (!func) { + func = new Function("event", code); + } + func.call(elt, e); + }); + }; + elt.addEventListener(eventName, listener); + nodeData.onHandlers.push({event:eventName, listener:listener}); + } + + function processHxOn(elt) { + var hxOnValue = getAttributeValue(elt, 'hx-on'); + if (hxOnValue) { + var handlers = {} + var lines = hxOnValue.split("\n"); + var currentEvent = null; + var curlyCount = 0; + while (lines.length > 0) { + var line = lines.shift(); + var match = line.match(/^\s*([a-zA-Z:\-\.]+:)(.*)/); + if (curlyCount === 0 && match) { + line.split(":") + currentEvent = match[1].slice(0, -1); // strip last colon + handlers[currentEvent] = match[2]; + } else { + handlers[currentEvent] += line; + } + curlyCount += countCurlies(line); + } + + for (var eventName in handlers) { + addHxOnEventHandler(elt, eventName, handlers[eventName]); + } + } + } + + function processHxOnWildcard(elt) { + // wipe any previous on handlers so that this function takes precedence + deInitOnHandlers(elt) + + for (var i = 0; i < elt.attributes.length; i++) { + var name = elt.attributes[i].name + var value = elt.attributes[i].value + if (startsWith(name, "hx-on:") || startsWith(name, "data-hx-on:")) { + let eventName = name.slice(name.indexOf(":") + 1) + // if the eventName starts with a colon, prepend "htmx" for shorthand support + if (startsWith(eventName, ":")) eventName = "htmx" + eventName + + addHxOnEventHandler(elt, eventName, value) + } + } + } + + function initNode(elt) { + if (closest(elt, htmx.config.disableSelector)) { + cleanUpElement(elt) + return; + } + var nodeData = getInternalData(elt); + if (nodeData.initHash !== attributeHash(elt)) { + // clean up any previously processed info + deInitNode(elt); + + nodeData.initHash = attributeHash(elt); + + processHxOn(elt); + + triggerEvent(elt, "htmx:beforeProcessNode") + + if (elt.value) { + nodeData.lastValue = elt.value; + } + + var triggerSpecs = getTriggerSpecs(elt); + var hasExplicitHttpAction = processVerbs(elt, nodeData, triggerSpecs); + + if (!hasExplicitHttpAction) { + if (getClosestAttributeValue(elt, "hx-boost") === "true") { + boostElement(elt, nodeData, triggerSpecs); + } else if (hasAttribute(elt, 'hx-trigger')) { + triggerSpecs.forEach(function (triggerSpec) { + // For "naked" triggers, don't do anything at all + addTriggerHandler(elt, triggerSpec, nodeData, function () { + }) + }) + } + } + + // Handle submit buttons/inputs that have the form attribute set + // see https://developer.mozilla.org/docs/Web/HTML/Element/button + if (elt.tagName === "FORM" || (getRawAttribute(elt, "type") === "submit" && hasAttribute(elt, "form"))) { + initButtonTracking(elt) + } + + var sseInfo = getAttributeValue(elt, 'hx-sse'); + if (sseInfo) { + processSSEInfo(elt, nodeData, sseInfo); + } + + var wsInfo = getAttributeValue(elt, 'hx-ws'); + if (wsInfo) { + processWebSocketInfo(elt, nodeData, wsInfo); + } + triggerEvent(elt, "htmx:afterProcessNode"); + } + } + + function processNode(elt) { + elt = resolveTarget(elt); + if (closest(elt, htmx.config.disableSelector)) { + cleanUpElement(elt) + return; + } + initNode(elt); + forEach(findElementsToProcess(elt), function(child) { initNode(child) }); + // Because it happens second, the new way of adding onHandlers superseeds the old one + // i.e. if there are any hx-on:eventName attributes, the hx-on attribute will be ignored + forEach(findHxOnWildcardElements(elt), processHxOnWildcard); + } + + //==================================================================== + // Event/Log Support + //==================================================================== + + function kebabEventName(str) { + return str.replace(/([a-z0-9])([A-Z])/g, '$1-$2').toLowerCase(); + } + + function makeEvent(eventName, detail) { + var evt; + if (window.CustomEvent && typeof window.CustomEvent === 'function') { + evt = new CustomEvent(eventName, {bubbles: true, cancelable: true, detail: detail}); + } else { + evt = getDocument().createEvent('CustomEvent'); + evt.initCustomEvent(eventName, true, true, detail); + } + return evt; + } + + function triggerErrorEvent(elt, eventName, detail) { + triggerEvent(elt, eventName, mergeObjects({error:eventName}, detail)); + } + + function ignoreEventForLogging(eventName) { + return eventName === "htmx:afterProcessNode" + } + + /** + * `withExtensions` locates all active extensions for a provided element, then + * executes the provided function using each of the active extensions. It should + * be called internally at every extendable execution point in htmx. + * + * @param {HTMLElement} elt + * @param {(extension:import("./htmx").HtmxExtension) => void} toDo + * @returns void + */ + function withExtensions(elt, toDo) { + forEach(getExtensions(elt), function(extension){ + try { + toDo(extension); + } catch (e) { + logError(e); + } + }); + } + + function logError(msg) { + if(console.error) { + console.error(msg); + } else if (console.log) { + console.log("ERROR: ", msg); + } + } + + function triggerEvent(elt, eventName, detail) { + elt = resolveTarget(elt); + if (detail == null) { + detail = {}; + } + detail["elt"] = elt; + var event = makeEvent(eventName, detail); + if (htmx.logger && !ignoreEventForLogging(eventName)) { + htmx.logger(elt, eventName, detail); + } + if (detail.error) { + logError(detail.error); + triggerEvent(elt, "htmx:error", {errorInfo:detail}) + } + var eventResult = elt.dispatchEvent(event); + var kebabName = kebabEventName(eventName); + if (eventResult && kebabName !== eventName) { + var kebabedEvent = makeEvent(kebabName, event.detail); + eventResult = eventResult && elt.dispatchEvent(kebabedEvent) + } + withExtensions(elt, function (extension) { + eventResult = eventResult && (extension.onEvent(eventName, event) !== false && !event.defaultPrevented) + }); + return eventResult; + } + + //==================================================================== + // History Support + //==================================================================== + var currentPathForHistory = location.pathname+location.search; + + function getHistoryElement() { + var historyElt = getDocument().querySelector('[hx-history-elt],[data-hx-history-elt]'); + return historyElt || getDocument().body; + } + + function saveToHistoryCache(url, content, title, scroll) { + if (!canAccessLocalStorage()) { + return; + } + + if (htmx.config.historyCacheSize <= 0) { + // make sure that an eventually already existing cache is purged + localStorage.removeItem("htmx-history-cache"); + return; + } + + url = normalizePath(url); + + var historyCache = parseJSON(localStorage.getItem("htmx-history-cache")) || []; + for (var i = 0; i < historyCache.length; i++) { + if (historyCache[i].url === url) { + historyCache.splice(i, 1); + break; + } + } + var newHistoryItem = {url:url, content: content, title:title, scroll:scroll}; + triggerEvent(getDocument().body, "htmx:historyItemCreated", {item:newHistoryItem, cache: historyCache}) + historyCache.push(newHistoryItem) + while (historyCache.length > htmx.config.historyCacheSize) { + historyCache.shift(); + } + while(historyCache.length > 0){ + try { + localStorage.setItem("htmx-history-cache", JSON.stringify(historyCache)); + break; + } catch (e) { + triggerErrorEvent(getDocument().body, "htmx:historyCacheError", {cause:e, cache: historyCache}) + historyCache.shift(); // shrink the cache and retry + } + } + } + + function getCachedHistory(url) { + if (!canAccessLocalStorage()) { + return null; + } + + url = normalizePath(url); + + var historyCache = parseJSON(localStorage.getItem("htmx-history-cache")) || []; + for (var i = 0; i < historyCache.length; i++) { + if (historyCache[i].url === url) { + return historyCache[i]; + } + } + return null; + } + + function cleanInnerHtmlForHistory(elt) { + var className = htmx.config.requestClass; + var clone = elt.cloneNode(true); + forEach(findAll(clone, "." + className), function(child){ + removeClassFromElement(child, className); + }); + return clone.innerHTML; + } + + function saveCurrentPageToHistory() { + var elt = getHistoryElement(); + var path = currentPathForHistory || location.pathname+location.search; + + // Allow history snapshot feature to be disabled where hx-history="false" + // is present *anywhere* in the current document we're about to save, + // so we can prevent privileged data entering the cache. + // The page will still be reachable as a history entry, but htmx will fetch it + // live from the server onpopstate rather than look in the localStorage cache + var disableHistoryCache + try { + disableHistoryCache = getDocument().querySelector('[hx-history="false" i],[data-hx-history="false" i]') + } catch (e) { + // IE11: insensitive modifier not supported so fallback to case sensitive selector + disableHistoryCache = getDocument().querySelector('[hx-history="false"],[data-hx-history="false"]') + } + if (!disableHistoryCache) { + triggerEvent(getDocument().body, "htmx:beforeHistorySave", {path: path, historyElt: elt}); + saveToHistoryCache(path, cleanInnerHtmlForHistory(elt), getDocument().title, window.scrollY); + } + + if (htmx.config.historyEnabled) history.replaceState({htmx: true}, getDocument().title, window.location.href); + } + + function pushUrlIntoHistory(path) { + // remove the cache buster parameter, if any + if (htmx.config.getCacheBusterParam) { + path = path.replace(/org\.htmx\.cache-buster=[^&]*&?/, '') + if (endsWith(path, '&') || endsWith(path, "?")) { + path = path.slice(0, -1); + } + } + if(htmx.config.historyEnabled) { + history.pushState({htmx:true}, "", path); + } + currentPathForHistory = path; + } + + function replaceUrlInHistory(path) { + if(htmx.config.historyEnabled) history.replaceState({htmx:true}, "", path); + currentPathForHistory = path; + } + + function settleImmediately(tasks) { + forEach(tasks, function (task) { + task.call(); + }); + } + + function loadHistoryFromServer(path) { + var request = new XMLHttpRequest(); + var details = {path: path, xhr:request}; + triggerEvent(getDocument().body, "htmx:historyCacheMiss", details); + request.open('GET', path, true); + request.setRequestHeader("HX-History-Restore-Request", "true"); + request.onload = function () { + if (this.status >= 200 && this.status < 400) { + triggerEvent(getDocument().body, "htmx:historyCacheMissLoad", details); + var fragment = makeFragment(this.response); + // @ts-ignore + fragment = fragment.querySelector('[hx-history-elt],[data-hx-history-elt]') || fragment; + var historyElement = getHistoryElement(); + var settleInfo = makeSettleInfo(historyElement); + var title = findTitle(this.response); + if (title) { + var titleElt = find("title"); + if (titleElt) { + titleElt.innerHTML = title; + } else { + window.document.title = title; + } + } + // @ts-ignore + swapInnerHTML(historyElement, fragment, settleInfo) + settleImmediately(settleInfo.tasks); + currentPathForHistory = path; + triggerEvent(getDocument().body, "htmx:historyRestore", {path: path, cacheMiss:true, serverResponse:this.response}); + } else { + triggerErrorEvent(getDocument().body, "htmx:historyCacheMissLoadError", details); + } + }; + request.send(); + } + + function restoreHistory(path) { + saveCurrentPageToHistory(); + path = path || location.pathname+location.search; + var cached = getCachedHistory(path); + if (cached) { + var fragment = makeFragment(cached.content); + var historyElement = getHistoryElement(); + var settleInfo = makeSettleInfo(historyElement); + swapInnerHTML(historyElement, fragment, settleInfo) + settleImmediately(settleInfo.tasks); + document.title = cached.title; + setTimeout(function () { + window.scrollTo(0, cached.scroll); + }, 0); // next 'tick', so browser has time to render layout + currentPathForHistory = path; + triggerEvent(getDocument().body, "htmx:historyRestore", {path:path, item:cached}); + } else { + if (htmx.config.refreshOnHistoryMiss) { + + // @ts-ignore: optional parameter in reload() function throws error + window.location.reload(true); + } else { + loadHistoryFromServer(path); + } + } + } + + function addRequestIndicatorClasses(elt) { + var indicators = findAttributeTargets(elt, 'hx-indicator'); + if (indicators == null) { + indicators = [elt]; + } + forEach(indicators, function (ic) { + var internalData = getInternalData(ic); + internalData.requestCount = (internalData.requestCount || 0) + 1; + ic.classList["add"].call(ic.classList, htmx.config.requestClass); + }); + return indicators; + } + + function disableElements(elt) { + var disabledElts = findAttributeTargets(elt, 'hx-disabled-elt'); + if (disabledElts == null) { + disabledElts = []; + } + forEach(disabledElts, function (disabledElement) { + var internalData = getInternalData(disabledElement); + internalData.requestCount = (internalData.requestCount || 0) + 1; + disabledElement.setAttribute("disabled", ""); + }); + return disabledElts; + } + + function removeRequestIndicators(indicators, disabled) { + forEach(indicators, function (ic) { + var internalData = getInternalData(ic); + internalData.requestCount = (internalData.requestCount || 0) - 1; + if (internalData.requestCount === 0) { + ic.classList["remove"].call(ic.classList, htmx.config.requestClass); + } + }); + forEach(disabled, function (disabledElement) { + var internalData = getInternalData(disabledElement); + internalData.requestCount = (internalData.requestCount || 0) - 1; + if (internalData.requestCount === 0) { + disabledElement.removeAttribute('disabled'); + } + }); + } + + //==================================================================== + // Input Value Processing + //==================================================================== + + function haveSeenNode(processed, elt) { + for (var i = 0; i < processed.length; i++) { + var node = processed[i]; + if (node.isSameNode(elt)) { + return true; + } + } + return false; + } + + function shouldInclude(elt) { + if(elt.name === "" || elt.name == null || elt.disabled) { + return false; + } + // ignore "submitter" types (see jQuery src/serialize.js) + if (elt.type === "button" || elt.type === "submit" || elt.tagName === "image" || elt.tagName === "reset" || elt.tagName === "file" ) { + return false; + } + if (elt.type === "checkbox" || elt.type === "radio" ) { + return elt.checked; + } + return true; + } + + function addValueToValues(name, value, values) { + // This is a little ugly because both the current value of the named value in the form + // and the new value could be arrays, so we have to handle all four cases :/ + if (name != null && value != null) { + var current = values[name]; + if (current === undefined) { + values[name] = value; + } else if (Array.isArray(current)) { + if (Array.isArray(value)) { + values[name] = current.concat(value); + } else { + current.push(value); + } + } else { + if (Array.isArray(value)) { + values[name] = [current].concat(value); + } else { + values[name] = [current, value]; + } + } + } + } + + function processInputValue(processed, values, errors, elt, validate) { + if (elt == null || haveSeenNode(processed, elt)) { + return; + } else { + processed.push(elt); + } + if (shouldInclude(elt)) { + var name = getRawAttribute(elt,"name"); + var value = elt.value; + if (elt.multiple && elt.tagName === "SELECT") { + value = toArray(elt.querySelectorAll("option:checked")).map(function (e) { return e.value }); + } + // include file inputs + if (elt.files) { + value = toArray(elt.files); + } + addValueToValues(name, value, values); + if (validate) { + validateElement(elt, errors); + } + } + if (matches(elt, 'form')) { + var inputs = elt.elements; + forEach(inputs, function(input) { + processInputValue(processed, values, errors, input, validate); + }); + } + } + + function validateElement(element, errors) { + if (element.willValidate) { + triggerEvent(element, "htmx:validation:validate") + if (!element.checkValidity()) { + errors.push({elt: element, message:element.validationMessage, validity:element.validity}); + triggerEvent(element, "htmx:validation:failed", {message:element.validationMessage, validity:element.validity}) + } + } + } + + /** + * @param {HTMLElement} elt + * @param {string} verb + */ + function getInputValues(elt, verb) { + var processed = []; + var values = {}; + var formValues = {}; + var errors = []; + var internalData = getInternalData(elt); + if (internalData.lastButtonClicked && !bodyContains(internalData.lastButtonClicked)) { + internalData.lastButtonClicked = null + } + + // only validate when form is directly submitted and novalidate or formnovalidate are not set + // or if the element has an explicit hx-validate="true" on it + var validate = (matches(elt, 'form') && elt.noValidate !== true) || getAttributeValue(elt, "hx-validate") === "true"; + if (internalData.lastButtonClicked) { + validate = validate && internalData.lastButtonClicked.formNoValidate !== true; + } + + // for a non-GET include the closest form + if (verb !== 'get') { + processInputValue(processed, formValues, errors, closest(elt, 'form'), validate); + } + + // include the element itself + processInputValue(processed, values, errors, elt, validate); + + // if a button or submit was clicked last, include its value + if (internalData.lastButtonClicked || elt.tagName === "BUTTON" || + (elt.tagName === "INPUT" && getRawAttribute(elt, "type") === "submit")) { + var button = internalData.lastButtonClicked || elt + var name = getRawAttribute(button, "name") + addValueToValues(name, button.value, formValues) + } + + // include any explicit includes + var includes = findAttributeTargets(elt, "hx-include"); + forEach(includes, function(node) { + processInputValue(processed, values, errors, node, validate); + // if a non-form is included, include any input values within it + if (!matches(node, 'form')) { + forEach(node.querySelectorAll(INPUT_SELECTOR), function (descendant) { + processInputValue(processed, values, errors, descendant, validate); + }) + } + }); + + // form values take precedence, overriding the regular values + values = mergeObjects(values, formValues); + + return {errors:errors, values:values}; + } + + function appendParam(returnStr, name, realValue) { + if (returnStr !== "") { + returnStr += "&"; + } + if (String(realValue) === "[object Object]") { + realValue = JSON.stringify(realValue); + } + var s = encodeURIComponent(realValue); + returnStr += encodeURIComponent(name) + "=" + s; + return returnStr; + } + + function urlEncode(values) { + var returnStr = ""; + for (var name in values) { + if (values.hasOwnProperty(name)) { + var value = values[name]; + if (Array.isArray(value)) { + forEach(value, function(v) { + returnStr = appendParam(returnStr, name, v); + }); + } else { + returnStr = appendParam(returnStr, name, value); + } + } + } + return returnStr; + } + + function makeFormData(values) { + var formData = new FormData(); + for (var name in values) { + if (values.hasOwnProperty(name)) { + var value = values[name]; + if (Array.isArray(value)) { + forEach(value, function(v) { + formData.append(name, v); + }); + } else { + formData.append(name, value); + } + } + } + return formData; + } + + //==================================================================== + // Ajax + //==================================================================== + + /** + * @param {HTMLElement} elt + * @param {HTMLElement} target + * @param {string} prompt + * @returns {Object} // TODO: Define/Improve HtmxHeaderSpecification + */ + function getHeaders(elt, target, prompt) { + var headers = { + "HX-Request" : "true", + "HX-Trigger" : getRawAttribute(elt, "id"), + "HX-Trigger-Name" : getRawAttribute(elt, "name"), + "HX-Target" : getAttributeValue(target, "id"), + "HX-Current-URL" : getDocument().location.href, + } + getValuesForElement(elt, "hx-headers", false, headers) + if (prompt !== undefined) { + headers["HX-Prompt"] = prompt; + } + if (getInternalData(elt).boosted) { + headers["HX-Boosted"] = "true"; + } + return headers; + } + + /** + * filterValues takes an object containing form input values + * and returns a new object that only contains keys that are + * specified by the closest "hx-params" attribute + * @param {Object} inputValues + * @param {HTMLElement} elt + * @returns {Object} + */ + function filterValues(inputValues, elt) { + var paramsValue = getClosestAttributeValue(elt, "hx-params"); + if (paramsValue) { + if (paramsValue === "none") { + return {}; + } else if (paramsValue === "*") { + return inputValues; + } else if(paramsValue.indexOf("not ") === 0) { + forEach(paramsValue.substr(4).split(","), function (name) { + name = name.trim(); + delete inputValues[name]; + }); + return inputValues; + } else { + var newValues = {} + forEach(paramsValue.split(","), function (name) { + name = name.trim(); + newValues[name] = inputValues[name]; + }); + return newValues; + } + } else { + return inputValues; + } + } + + function isAnchorLink(elt) { + return getRawAttribute(elt, 'href') && getRawAttribute(elt, 'href').indexOf("#") >=0 + } + + /** + * + * @param {HTMLElement} elt + * @param {string} swapInfoOverride + * @returns {import("./htmx").HtmxSwapSpecification} + */ + function getSwapSpecification(elt, swapInfoOverride) { + var swapInfo = swapInfoOverride ? swapInfoOverride : getClosestAttributeValue(elt, "hx-swap"); + var swapSpec = { + "swapStyle" : getInternalData(elt).boosted ? 'innerHTML' : htmx.config.defaultSwapStyle, + "swapDelay" : htmx.config.defaultSwapDelay, + "settleDelay" : htmx.config.defaultSettleDelay + } + if (htmx.config.scrollIntoViewOnBoost && getInternalData(elt).boosted && !isAnchorLink(elt)) { + swapSpec["show"] = "top" + } + if (swapInfo) { + var split = splitOnWhitespace(swapInfo); + if (split.length > 0) { + for (var i = 0; i < split.length; i++) { + var value = split[i]; + if (value.indexOf("swap:") === 0) { + swapSpec["swapDelay"] = parseInterval(value.substr(5)); + } else if (value.indexOf("settle:") === 0) { + swapSpec["settleDelay"] = parseInterval(value.substr(7)); + } else if (value.indexOf("transition:") === 0) { + swapSpec["transition"] = value.substr(11) === "true"; + } else if (value.indexOf("ignoreTitle:") === 0) { + swapSpec["ignoreTitle"] = value.substr(12) === "true"; + } else if (value.indexOf("scroll:") === 0) { + var scrollSpec = value.substr(7); + var splitSpec = scrollSpec.split(":"); + var scrollVal = splitSpec.pop(); + var selectorVal = splitSpec.length > 0 ? splitSpec.join(":") : null; + swapSpec["scroll"] = scrollVal; + swapSpec["scrollTarget"] = selectorVal; + } else if (value.indexOf("show:") === 0) { + var showSpec = value.substr(5); + var splitSpec = showSpec.split(":"); + var showVal = splitSpec.pop(); + var selectorVal = splitSpec.length > 0 ? splitSpec.join(":") : null; + swapSpec["show"] = showVal; + swapSpec["showTarget"] = selectorVal; + } else if (value.indexOf("focus-scroll:") === 0) { + var focusScrollVal = value.substr("focus-scroll:".length); + swapSpec["focusScroll"] = focusScrollVal == "true"; + } else if (i == 0) { + swapSpec["swapStyle"] = value; + } else { + logError('Unknown modifier in hx-swap: ' + value); + } + } + } + } + return swapSpec; + } + + function usesFormData(elt) { + return getClosestAttributeValue(elt, "hx-encoding") === "multipart/form-data" || + (matches(elt, "form") && getRawAttribute(elt, 'enctype') === "multipart/form-data"); + } + + function encodeParamsForBody(xhr, elt, filteredParameters) { + var encodedParameters = null; + withExtensions(elt, function (extension) { + if (encodedParameters == null) { + encodedParameters = extension.encodeParameters(xhr, filteredParameters, elt); + } + }); + if (encodedParameters != null) { + return encodedParameters; + } else { + if (usesFormData(elt)) { + return makeFormData(filteredParameters); + } else { + return urlEncode(filteredParameters); + } + } + } + + /** + * + * @param {Element} target + * @returns {import("./htmx").HtmxSettleInfo} + */ + function makeSettleInfo(target) { + return {tasks: [], elts: [target]}; + } + + function updateScrollState(content, swapSpec) { + var first = content[0]; + var last = content[content.length - 1]; + if (swapSpec.scroll) { + var target = null; + if (swapSpec.scrollTarget) { + target = querySelectorExt(first, swapSpec.scrollTarget); + } + if (swapSpec.scroll === "top" && (first || target)) { + target = target || first; + target.scrollTop = 0; + } + if (swapSpec.scroll === "bottom" && (last || target)) { + target = target || last; + target.scrollTop = target.scrollHeight; + } + } + if (swapSpec.show) { + var target = null; + if (swapSpec.showTarget) { + var targetStr = swapSpec.showTarget; + if (swapSpec.showTarget === "window") { + targetStr = "body"; + } + target = querySelectorExt(first, targetStr); + } + if (swapSpec.show === "top" && (first || target)) { + target = target || first; + target.scrollIntoView({block:'start', behavior: htmx.config.scrollBehavior}); + } + if (swapSpec.show === "bottom" && (last || target)) { + target = target || last; + target.scrollIntoView({block:'end', behavior: htmx.config.scrollBehavior}); + } + } + } + + /** + * @param {HTMLElement} elt + * @param {string} attr + * @param {boolean=} evalAsDefault + * @param {Object=} values + * @returns {Object} + */ + function getValuesForElement(elt, attr, evalAsDefault, values) { + if (values == null) { + values = {}; + } + if (elt == null) { + return values; + } + var attributeValue = getAttributeValue(elt, attr); + if (attributeValue) { + var str = attributeValue.trim(); + var evaluateValue = evalAsDefault; + if (str === "unset") { + return null; + } + if (str.indexOf("javascript:") === 0) { + str = str.substr(11); + evaluateValue = true; + } else if (str.indexOf("js:") === 0) { + str = str.substr(3); + evaluateValue = true; + } + if (str.indexOf('{') !== 0) { + str = "{" + str + "}"; + } + var varsValues; + if (evaluateValue) { + varsValues = maybeEval(elt,function () {return Function("return (" + str + ")")();}, {}); + } else { + varsValues = parseJSON(str); + } + for (var key in varsValues) { + if (varsValues.hasOwnProperty(key)) { + if (values[key] == null) { + values[key] = varsValues[key]; + } + } + } + } + return getValuesForElement(parentElt(elt), attr, evalAsDefault, values); + } + + function maybeEval(elt, toEval, defaultVal) { + if (htmx.config.allowEval) { + return toEval(); + } else { + triggerErrorEvent(elt, 'htmx:evalDisallowedError'); + return defaultVal; + } + } + + /** + * @param {HTMLElement} elt + * @param {*} expressionVars + * @returns + */ + function getHXVarsForElement(elt, expressionVars) { + return getValuesForElement(elt, "hx-vars", true, expressionVars); + } + + /** + * @param {HTMLElement} elt + * @param {*} expressionVars + * @returns + */ + function getHXValsForElement(elt, expressionVars) { + return getValuesForElement(elt, "hx-vals", false, expressionVars); + } + + /** + * @param {HTMLElement} elt + * @returns {Object} + */ + function getExpressionVars(elt) { + return mergeObjects(getHXVarsForElement(elt), getHXValsForElement(elt)); + } + + function safelySetHeaderValue(xhr, header, headerValue) { + if (headerValue !== null) { + try { + xhr.setRequestHeader(header, headerValue); + } catch (e) { + // On an exception, try to set the header URI encoded instead + xhr.setRequestHeader(header, encodeURIComponent(headerValue)); + xhr.setRequestHeader(header + "-URI-AutoEncoded", "true"); + } + } + } + + function getPathFromResponse(xhr) { + // NB: IE11 does not support this stuff + if (xhr.responseURL && typeof(URL) !== "undefined") { + try { + var url = new URL(xhr.responseURL); + return url.pathname + url.search; + } catch (e) { + triggerErrorEvent(getDocument().body, "htmx:badResponseUrl", {url: xhr.responseURL}); + } + } + } + + function hasHeader(xhr, regexp) { + return xhr.getAllResponseHeaders().match(regexp); + } + + function ajaxHelper(verb, path, context) { + verb = verb.toLowerCase(); + if (context) { + if (context instanceof Element || isType(context, 'String')) { + return issueAjaxRequest(verb, path, null, null, { + targetOverride: resolveTarget(context), + returnPromise: true + }); + } else { + return issueAjaxRequest(verb, path, resolveTarget(context.source), context.event, + { + handler : context.handler, + headers : context.headers, + values : context.values, + targetOverride: resolveTarget(context.target), + swapOverride: context.swap, + returnPromise: true + }); + } + } else { + return issueAjaxRequest(verb, path, null, null, { + returnPromise: true + }); + } + } + + function hierarchyForElt(elt) { + var arr = []; + while (elt) { + arr.push(elt); + elt = elt.parentElement; + } + return arr; + } + + function verifyPath(elt, path, requestConfig) { + var sameHost + var url + if (typeof URL === "function") { + url = new URL(path, document.location.href); + var origin = document.location.origin; + sameHost = origin === url.origin; + } else { + // IE11 doesn't support URL + url = path + sameHost = startsWith(path, document.location.origin) + } + + if (htmx.config.selfRequestsOnly) { + if (!sameHost) { + return false; + } + } + return triggerEvent(elt, "htmx:validateUrl", mergeObjects({url: url, sameHost: sameHost}, requestConfig)); + } + + function issueAjaxRequest(verb, path, elt, event, etc, confirmed) { + var resolve = null; + var reject = null; + etc = etc != null ? etc : {}; + if(etc.returnPromise && typeof Promise !== "undefined"){ + var promise = new Promise(function (_resolve, _reject) { + resolve = _resolve; + reject = _reject; + }); + } + if(elt == null) { + elt = getDocument().body; + } + var responseHandler = etc.handler || handleAjaxResponse; + + if (!bodyContains(elt)) { + // do not issue requests for elements removed from the DOM + maybeCall(resolve); + return promise; + } + var target = etc.targetOverride || getTarget(elt); + if (target == null || target == DUMMY_ELT) { + triggerErrorEvent(elt, 'htmx:targetError', {target: getAttributeValue(elt, "hx-target")}); + maybeCall(reject); + return promise; + } + + var eltData = getInternalData(elt); + var submitter = eltData.lastButtonClicked; + + if (submitter) { + var buttonPath = getRawAttribute(submitter, "formaction"); + if (buttonPath != null) { + path = buttonPath; + } + + var buttonVerb = getRawAttribute(submitter, "formmethod") + if (buttonVerb != null) { + // ignore buttons with formmethod="dialog" + if (buttonVerb.toLowerCase() !== "dialog") { + verb = buttonVerb; + } + } + } + + var confirmQuestion = getClosestAttributeValue(elt, "hx-confirm"); + // allow event-based confirmation w/ a callback + if (confirmed === undefined) { + var issueRequest = function(skipConfirmation) { + return issueAjaxRequest(verb, path, elt, event, etc, !!skipConfirmation); + } + var confirmDetails = {target: target, elt: elt, path: path, verb: verb, triggeringEvent: event, etc: etc, issueRequest: issueRequest, question: confirmQuestion}; + if (triggerEvent(elt, 'htmx:confirm', confirmDetails) === false) { + maybeCall(resolve); + return promise; + } + } + + var syncElt = elt; + var syncStrategy = getClosestAttributeValue(elt, "hx-sync"); + var queueStrategy = null; + var abortable = false; + if (syncStrategy) { + var syncStrings = syncStrategy.split(":"); + var selector = syncStrings[0].trim(); + if (selector === "this") { + syncElt = findThisElement(elt, 'hx-sync'); + } else { + syncElt = querySelectorExt(elt, selector); + } + // default to the drop strategy + syncStrategy = (syncStrings[1] || 'drop').trim(); + eltData = getInternalData(syncElt); + if (syncStrategy === "drop" && eltData.xhr && eltData.abortable !== true) { + maybeCall(resolve); + return promise; + } else if (syncStrategy === "abort") { + if (eltData.xhr) { + maybeCall(resolve); + return promise; + } else { + abortable = true; + } + } else if (syncStrategy === "replace") { + triggerEvent(syncElt, 'htmx:abort'); // abort the current request and continue + } else if (syncStrategy.indexOf("queue") === 0) { + var queueStrArray = syncStrategy.split(" "); + queueStrategy = (queueStrArray[1] || "last").trim(); + } + } + + if (eltData.xhr) { + if (eltData.abortable) { + triggerEvent(syncElt, 'htmx:abort'); // abort the current request and continue + } else { + if(queueStrategy == null){ + if (event) { + var eventData = getInternalData(event); + if (eventData && eventData.triggerSpec && eventData.triggerSpec.queue) { + queueStrategy = eventData.triggerSpec.queue; + } + } + if (queueStrategy == null) { + queueStrategy = "last"; + } + } + if (eltData.queuedRequests == null) { + eltData.queuedRequests = []; + } + if (queueStrategy === "first" && eltData.queuedRequests.length === 0) { + eltData.queuedRequests.push(function () { + issueAjaxRequest(verb, path, elt, event, etc) + }); + } else if (queueStrategy === "all") { + eltData.queuedRequests.push(function () { + issueAjaxRequest(verb, path, elt, event, etc) + }); + } else if (queueStrategy === "last") { + eltData.queuedRequests = []; // dump existing queue + eltData.queuedRequests.push(function () { + issueAjaxRequest(verb, path, elt, event, etc) + }); + } + maybeCall(resolve); + return promise; + } + } + + var xhr = new XMLHttpRequest(); + eltData.xhr = xhr; + eltData.abortable = abortable; + var endRequestLock = function(){ + eltData.xhr = null; + eltData.abortable = false; + if (eltData.queuedRequests != null && + eltData.queuedRequests.length > 0) { + var queuedRequest = eltData.queuedRequests.shift(); + queuedRequest(); + } + } + var promptQuestion = getClosestAttributeValue(elt, "hx-prompt"); + if (promptQuestion) { + var promptResponse = prompt(promptQuestion); + // prompt returns null if cancelled and empty string if accepted with no entry + if (promptResponse === null || + !triggerEvent(elt, 'htmx:prompt', {prompt: promptResponse, target:target})) { + maybeCall(resolve); + endRequestLock(); + return promise; + } + } + + if (confirmQuestion && !confirmed) { + if(!confirm(confirmQuestion)) { + maybeCall(resolve); + endRequestLock() + return promise; + } + } + + + var headers = getHeaders(elt, target, promptResponse); + if (etc.headers) { + headers = mergeObjects(headers, etc.headers); + } + var results = getInputValues(elt, verb); + var errors = results.errors; + var rawParameters = results.values; + if (etc.values) { + rawParameters = mergeObjects(rawParameters, etc.values); + } + var expressionVars = getExpressionVars(elt); + var allParameters = mergeObjects(rawParameters, expressionVars); + var filteredParameters = filterValues(allParameters, elt); + + if (verb !== 'get' && !usesFormData(elt)) { + headers['Content-Type'] = 'application/x-www-form-urlencoded'; + } + + if (htmx.config.getCacheBusterParam && verb === 'get') { + filteredParameters['org.htmx.cache-buster'] = getRawAttribute(target, "id") || "true"; + } + + // behavior of anchors w/ empty href is to use the current URL + if (path == null || path === "") { + path = getDocument().location.href; + } + + + var requestAttrValues = getValuesForElement(elt, 'hx-request'); + + var eltIsBoosted = getInternalData(elt).boosted; + + var useUrlParams = htmx.config.methodsThatUseUrlParams.indexOf(verb) >= 0 + + var requestConfig = { + boosted: eltIsBoosted, + useUrlParams: useUrlParams, + parameters: filteredParameters, + unfilteredParameters: allParameters, + headers:headers, + target:target, + verb:verb, + errors:errors, + withCredentials: etc.credentials || requestAttrValues.credentials || htmx.config.withCredentials, + timeout: etc.timeout || requestAttrValues.timeout || htmx.config.timeout, + path:path, + triggeringEvent:event + }; + + if(!triggerEvent(elt, 'htmx:configRequest', requestConfig)){ + maybeCall(resolve); + endRequestLock(); + return promise; + } + + // copy out in case the object was overwritten + path = requestConfig.path; + verb = requestConfig.verb; + headers = requestConfig.headers; + filteredParameters = requestConfig.parameters; + errors = requestConfig.errors; + useUrlParams = requestConfig.useUrlParams; + + if(errors && errors.length > 0){ + triggerEvent(elt, 'htmx:validation:halted', requestConfig) + maybeCall(resolve); + endRequestLock(); + return promise; + } + + var splitPath = path.split("#"); + var pathNoAnchor = splitPath[0]; + var anchor = splitPath[1]; + + var finalPath = path + if (useUrlParams) { + finalPath = pathNoAnchor; + var values = Object.keys(filteredParameters).length !== 0; + if (values) { + if (finalPath.indexOf("?") < 0) { + finalPath += "?"; + } else { + finalPath += "&"; + } + finalPath += urlEncode(filteredParameters); + if (anchor) { + finalPath += "#" + anchor; + } + } + } + + if (!verifyPath(elt, finalPath, requestConfig)) { + triggerErrorEvent(elt, 'htmx:invalidPath', requestConfig) + maybeCall(reject); + return promise; + }; + + xhr.open(verb.toUpperCase(), finalPath, true); + xhr.overrideMimeType("text/html"); + xhr.withCredentials = requestConfig.withCredentials; + xhr.timeout = requestConfig.timeout; + + // request headers + if (requestAttrValues.noHeaders) { + // ignore all headers + } else { + for (var header in headers) { + if (headers.hasOwnProperty(header)) { + var headerValue = headers[header]; + safelySetHeaderValue(xhr, header, headerValue); + } + } + } + + var responseInfo = { + xhr: xhr, target: target, requestConfig: requestConfig, etc: etc, boosted: eltIsBoosted, + pathInfo: { + requestPath: path, + finalRequestPath: finalPath, + anchor: anchor + } + }; + + xhr.onload = function () { + try { + var hierarchy = hierarchyForElt(elt); + responseInfo.pathInfo.responsePath = getPathFromResponse(xhr); + responseHandler(elt, responseInfo); + removeRequestIndicators(indicators, disableElts); + triggerEvent(elt, 'htmx:afterRequest', responseInfo); + triggerEvent(elt, 'htmx:afterOnLoad', responseInfo); + // if the body no longer contains the element, trigger the event on the closest parent + // remaining in the DOM + if (!bodyContains(elt)) { + var secondaryTriggerElt = null; + while (hierarchy.length > 0 && secondaryTriggerElt == null) { + var parentEltInHierarchy = hierarchy.shift(); + if (bodyContains(parentEltInHierarchy)) { + secondaryTriggerElt = parentEltInHierarchy; + } + } + if (secondaryTriggerElt) { + triggerEvent(secondaryTriggerElt, 'htmx:afterRequest', responseInfo); + triggerEvent(secondaryTriggerElt, 'htmx:afterOnLoad', responseInfo); + } + } + maybeCall(resolve); + endRequestLock(); + } catch (e) { + triggerErrorEvent(elt, 'htmx:onLoadError', mergeObjects({error:e}, responseInfo)); + throw e; + } + } + xhr.onerror = function () { + removeRequestIndicators(indicators, disableElts); + triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo); + triggerErrorEvent(elt, 'htmx:sendError', responseInfo); + maybeCall(reject); + endRequestLock(); + } + xhr.onabort = function() { + removeRequestIndicators(indicators, disableElts); + triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo); + triggerErrorEvent(elt, 'htmx:sendAbort', responseInfo); + maybeCall(reject); + endRequestLock(); + } + xhr.ontimeout = function() { + removeRequestIndicators(indicators, disableElts); + triggerErrorEvent(elt, 'htmx:afterRequest', responseInfo); + triggerErrorEvent(elt, 'htmx:timeout', responseInfo); + maybeCall(reject); + endRequestLock(); + } + if(!triggerEvent(elt, 'htmx:beforeRequest', responseInfo)){ + maybeCall(resolve); + endRequestLock() + return promise + } + var indicators = addRequestIndicatorClasses(elt); + var disableElts = disableElements(elt); + + forEach(['loadstart', 'loadend', 'progress', 'abort'], function(eventName) { + forEach([xhr, xhr.upload], function (target) { + target.addEventListener(eventName, function(event){ + triggerEvent(elt, "htmx:xhr:" + eventName, { + lengthComputable:event.lengthComputable, + loaded:event.loaded, + total:event.total + }); + }) + }); + }); + triggerEvent(elt, 'htmx:beforeSend', responseInfo); + var params = useUrlParams ? null : encodeParamsForBody(xhr, elt, filteredParameters) + xhr.send(params); + return promise; + } + + function determineHistoryUpdates(elt, responseInfo) { + + var xhr = responseInfo.xhr; + + //=========================================== + // First consult response headers + //=========================================== + var pathFromHeaders = null; + var typeFromHeaders = null; + if (hasHeader(xhr,/HX-Push:/i)) { + pathFromHeaders = xhr.getResponseHeader("HX-Push"); + typeFromHeaders = "push"; + } else if (hasHeader(xhr,/HX-Push-Url:/i)) { + pathFromHeaders = xhr.getResponseHeader("HX-Push-Url"); + typeFromHeaders = "push"; + } else if (hasHeader(xhr,/HX-Replace-Url:/i)) { + pathFromHeaders = xhr.getResponseHeader("HX-Replace-Url"); + typeFromHeaders = "replace"; + } + + // if there was a response header, that has priority + if (pathFromHeaders) { + if (pathFromHeaders === "false") { + return {} + } else { + return { + type: typeFromHeaders, + path : pathFromHeaders + } + } + } + + //=========================================== + // Next resolve via DOM values + //=========================================== + var requestPath = responseInfo.pathInfo.finalRequestPath; + var responsePath = responseInfo.pathInfo.responsePath; + + var pushUrl = getClosestAttributeValue(elt, "hx-push-url"); + var replaceUrl = getClosestAttributeValue(elt, "hx-replace-url"); + var elementIsBoosted = getInternalData(elt).boosted; + + var saveType = null; + var path = null; + + if (pushUrl) { + saveType = "push"; + path = pushUrl; + } else if (replaceUrl) { + saveType = "replace"; + path = replaceUrl; + } else if (elementIsBoosted) { + saveType = "push"; + path = responsePath || requestPath; // if there is no response path, go with the original request path + } + + if (path) { + // false indicates no push, return empty object + if (path === "false") { + return {}; + } + + // true indicates we want to follow wherever the server ended up sending us + if (path === "true") { + path = responsePath || requestPath; // if there is no response path, go with the original request path + } + + // restore any anchor associated with the request + if (responseInfo.pathInfo.anchor && + path.indexOf("#") === -1) { + path = path + "#" + responseInfo.pathInfo.anchor; + } + + return { + type:saveType, + path: path + } + } else { + return {}; + } + } + + function handleAjaxResponse(elt, responseInfo) { + var xhr = responseInfo.xhr; + var target = responseInfo.target; + var etc = responseInfo.etc; + var requestConfig = responseInfo.requestConfig; + + if (!triggerEvent(elt, 'htmx:beforeOnLoad', responseInfo)) return; + + if (hasHeader(xhr, /HX-Trigger:/i)) { + handleTrigger(xhr, "HX-Trigger", elt); + } + + if (hasHeader(xhr, /HX-Location:/i)) { + saveCurrentPageToHistory(); + var redirectPath = xhr.getResponseHeader("HX-Location"); + var swapSpec; + if (redirectPath.indexOf("{") === 0) { + swapSpec = parseJSON(redirectPath); + // what's the best way to throw an error if the user didn't include this + redirectPath = swapSpec['path']; + delete swapSpec['path']; + } + ajaxHelper('GET', redirectPath, swapSpec).then(function(){ + pushUrlIntoHistory(redirectPath); + }); + return; + } + + var shouldRefresh = hasHeader(xhr, /HX-Refresh:/i) && "true" === xhr.getResponseHeader("HX-Refresh"); + + if (hasHeader(xhr, /HX-Redirect:/i)) { + location.href = xhr.getResponseHeader("HX-Redirect"); + shouldRefresh && location.reload(); + return; + } + + if (shouldRefresh) { + location.reload(); + return; + } + + if (hasHeader(xhr,/HX-Retarget:/i)) { + responseInfo.target = getDocument().querySelector(xhr.getResponseHeader("HX-Retarget")); + } + + var historyUpdate = determineHistoryUpdates(elt, responseInfo); + + // by default htmx only swaps on 200 return codes and does not swap + // on 204 'No Content' + // this can be ovverriden by responding to the htmx:beforeSwap event and + // overriding the detail.shouldSwap property + var shouldSwap = xhr.status >= 200 && xhr.status < 400 && xhr.status !== 204; + var serverResponse = xhr.response; + var isError = xhr.status >= 400; + var ignoreTitle = htmx.config.ignoreTitle + var beforeSwapDetails = mergeObjects({shouldSwap: shouldSwap, serverResponse:serverResponse, isError:isError, ignoreTitle:ignoreTitle }, responseInfo); + if (!triggerEvent(target, 'htmx:beforeSwap', beforeSwapDetails)) return; + + target = beforeSwapDetails.target; // allow re-targeting + serverResponse = beforeSwapDetails.serverResponse; // allow updating content + isError = beforeSwapDetails.isError; // allow updating error + ignoreTitle = beforeSwapDetails.ignoreTitle; // allow updating ignoring title + + responseInfo.target = target; // Make updated target available to response events + responseInfo.failed = isError; // Make failed property available to response events + responseInfo.successful = !isError; // Make successful property available to response events + + if (beforeSwapDetails.shouldSwap) { + if (xhr.status === 286) { + cancelPolling(elt); + } + + withExtensions(elt, function (extension) { + serverResponse = extension.transformResponse(serverResponse, xhr, elt); + }); + + // Save current page if there will be a history update + if (historyUpdate.type) { + saveCurrentPageToHistory(); + } + + var swapOverride = etc.swapOverride; + if (hasHeader(xhr,/HX-Reswap:/i)) { + swapOverride = xhr.getResponseHeader("HX-Reswap"); + } + var swapSpec = getSwapSpecification(elt, swapOverride); + + if (swapSpec.hasOwnProperty('ignoreTitle')) { + ignoreTitle = swapSpec.ignoreTitle; + } + + target.classList.add(htmx.config.swappingClass); + + // optional transition API promise callbacks + var settleResolve = null; + var settleReject = null; + + var doSwap = function () { + try { + var activeElt = document.activeElement; + var selectionInfo = {}; + try { + selectionInfo = { + elt: activeElt, + // @ts-ignore + start: activeElt ? activeElt.selectionStart : null, + // @ts-ignore + end: activeElt ? activeElt.selectionEnd : null + }; + } catch (e) { + // safari issue - see https://github.com/microsoft/playwright/issues/5894 + } + + var selectOverride; + if (hasHeader(xhr, /HX-Reselect:/i)) { + selectOverride = xhr.getResponseHeader("HX-Reselect"); + } + + var settleInfo = makeSettleInfo(target); + selectAndSwap(swapSpec.swapStyle, target, elt, serverResponse, settleInfo, selectOverride); + + if (selectionInfo.elt && + !bodyContains(selectionInfo.elt) && + getRawAttribute(selectionInfo.elt, "id")) { + var newActiveElt = document.getElementById(getRawAttribute(selectionInfo.elt, "id")); + var focusOptions = { preventScroll: swapSpec.focusScroll !== undefined ? !swapSpec.focusScroll : !htmx.config.defaultFocusScroll }; + if (newActiveElt) { + // @ts-ignore + if (selectionInfo.start && newActiveElt.setSelectionRange) { + // @ts-ignore + try { + newActiveElt.setSelectionRange(selectionInfo.start, selectionInfo.end); + } catch (e) { + // the setSelectionRange method is present on fields that don't support it, so just let this fail + } + } + newActiveElt.focus(focusOptions); + } + } + + target.classList.remove(htmx.config.swappingClass); + forEach(settleInfo.elts, function (elt) { + if (elt.classList) { + elt.classList.add(htmx.config.settlingClass); + } + triggerEvent(elt, 'htmx:afterSwap', responseInfo); + }); + + if (hasHeader(xhr, /HX-Trigger-After-Swap:/i)) { + var finalElt = elt; + if (!bodyContains(elt)) { + finalElt = getDocument().body; + } + handleTrigger(xhr, "HX-Trigger-After-Swap", finalElt); + } + + var doSettle = function () { + forEach(settleInfo.tasks, function (task) { + task.call(); + }); + forEach(settleInfo.elts, function (elt) { + if (elt.classList) { + elt.classList.remove(htmx.config.settlingClass); + } + triggerEvent(elt, 'htmx:afterSettle', responseInfo); + }); + + // if we need to save history, do so + if (historyUpdate.type) { + triggerEvent(getDocument().body, 'htmx:beforeHistoryUpdate', mergeObjects({ history: historyUpdate }, responseInfo)); + if (historyUpdate.type === "push") { + pushUrlIntoHistory(historyUpdate.path); + triggerEvent(getDocument().body, 'htmx:pushedIntoHistory', {path: historyUpdate.path}); + } else { + replaceUrlInHistory(historyUpdate.path); + triggerEvent(getDocument().body, 'htmx:replacedInHistory', {path: historyUpdate.path}); + } + } + if (responseInfo.pathInfo.anchor) { + var anchorTarget = getDocument().getElementById(responseInfo.pathInfo.anchor); + if(anchorTarget) { + anchorTarget.scrollIntoView({block:'start', behavior: "auto"}); + } + } + + if(settleInfo.title && !ignoreTitle) { + var titleElt = find("title"); + if(titleElt) { + titleElt.innerHTML = settleInfo.title; + } else { + window.document.title = settleInfo.title; + } + } + + updateScrollState(settleInfo.elts, swapSpec); + + if (hasHeader(xhr, /HX-Trigger-After-Settle:/i)) { + var finalElt = elt; + if (!bodyContains(elt)) { + finalElt = getDocument().body; + } + handleTrigger(xhr, "HX-Trigger-After-Settle", finalElt); + } + maybeCall(settleResolve); + } + + if (swapSpec.settleDelay > 0) { + setTimeout(doSettle, swapSpec.settleDelay) + } else { + doSettle(); + } + } catch (e) { + triggerErrorEvent(elt, 'htmx:swapError', responseInfo); + maybeCall(settleReject); + throw e; + } + }; + + var shouldTransition = htmx.config.globalViewTransitions + if(swapSpec.hasOwnProperty('transition')){ + shouldTransition = swapSpec.transition; + } + + if(shouldTransition && + triggerEvent(elt, 'htmx:beforeTransition', responseInfo) && + typeof Promise !== "undefined" && document.startViewTransition){ + var settlePromise = new Promise(function (_resolve, _reject) { + settleResolve = _resolve; + settleReject = _reject; + }); + // wrap the original doSwap() in a call to startViewTransition() + var innerDoSwap = doSwap; + doSwap = function() { + document.startViewTransition(function () { + innerDoSwap(); + return settlePromise; + }); + } + } + + + if (swapSpec.swapDelay > 0) { + setTimeout(doSwap, swapSpec.swapDelay) + } else { + doSwap(); + } + } + if (isError) { + triggerErrorEvent(elt, 'htmx:responseError', mergeObjects({error: "Response Status Error Code " + xhr.status + " from " + responseInfo.pathInfo.requestPath}, responseInfo)); + } + } + + //==================================================================== + // Extensions API + //==================================================================== + + /** @type {Object} */ + var extensions = {}; + + /** + * extensionBase defines the default functions for all extensions. + * @returns {import("./htmx").HtmxExtension} + */ + function extensionBase() { + return { + init: function(api) {return null;}, + onEvent : function(name, evt) {return true;}, + transformResponse : function(text, xhr, elt) {return text;}, + isInlineSwap : function(swapStyle) {return false;}, + handleSwap : function(swapStyle, target, fragment, settleInfo) {return false;}, + encodeParameters : function(xhr, parameters, elt) {return null;} + } + } + + /** + * defineExtension initializes the extension and adds it to the htmx registry + * + * @param {string} name + * @param {import("./htmx").HtmxExtension} extension + */ + function defineExtension(name, extension) { + if(extension.init) { + extension.init(internalAPI) + } + extensions[name] = mergeObjects(extensionBase(), extension); + } + + /** + * removeExtension removes an extension from the htmx registry + * + * @param {string} name + */ + function removeExtension(name) { + delete extensions[name]; + } + + /** + * getExtensions searches up the DOM tree to return all extensions that can be applied to a given element + * + * @param {HTMLElement} elt + * @param {import("./htmx").HtmxExtension[]=} extensionsToReturn + * @param {import("./htmx").HtmxExtension[]=} extensionsToIgnore + */ + function getExtensions(elt, extensionsToReturn, extensionsToIgnore) { + + if (elt == undefined) { + return extensionsToReturn; + } + if (extensionsToReturn == undefined) { + extensionsToReturn = []; + } + if (extensionsToIgnore == undefined) { + extensionsToIgnore = []; + } + var extensionsForElement = getAttributeValue(elt, "hx-ext"); + if (extensionsForElement) { + forEach(extensionsForElement.split(","), function(extensionName){ + extensionName = extensionName.replace(/ /g, ''); + if (extensionName.slice(0, 7) == "ignore:") { + extensionsToIgnore.push(extensionName.slice(7)); + return; + } + if (extensionsToIgnore.indexOf(extensionName) < 0) { + var extension = extensions[extensionName]; + if (extension && extensionsToReturn.indexOf(extension) < 0) { + extensionsToReturn.push(extension); + } + } + }); + } + return getExtensions(parentElt(elt), extensionsToReturn, extensionsToIgnore); + } + + //==================================================================== + // Initialization + //==================================================================== + var isReady = false + getDocument().addEventListener('DOMContentLoaded', function() { + isReady = true + }) + + /** + * Execute a function now if DOMContentLoaded has fired, otherwise listen for it. + * + * This function uses isReady because there is no realiable way to ask the browswer whether + * the DOMContentLoaded event has already been fired; there's a gap between DOMContentLoaded + * firing and readystate=complete. + */ + function ready(fn) { + // Checking readyState here is a failsafe in case the htmx script tag entered the DOM by + // some means other than the initial page load. + if (isReady || getDocument().readyState === 'complete') { + fn(); + } else { + getDocument().addEventListener('DOMContentLoaded', fn); + } + } + + function insertIndicatorStyles() { + if (htmx.config.includeIndicatorStyles !== false) { + getDocument().head.insertAdjacentHTML("beforeend", + ""); + } + } + + function getMetaConfig() { + var element = getDocument().querySelector('meta[name="htmx-config"]'); + if (element) { + // @ts-ignore + return parseJSON(element.content); + } else { + return null; + } + } + + function mergeMetaConfig() { + var metaConfig = getMetaConfig(); + if (metaConfig) { + htmx.config = mergeObjects(htmx.config , metaConfig) + } + } + + // initialize the document + ready(function () { + mergeMetaConfig(); + insertIndicatorStyles(); + var body = getDocument().body; + processNode(body); + var restoredElts = getDocument().querySelectorAll( + "[hx-trigger='restored'],[data-hx-trigger='restored']" + ); + body.addEventListener("htmx:abort", function (evt) { + var target = evt.target; + var internalData = getInternalData(target); + if (internalData && internalData.xhr) { + internalData.xhr.abort(); + } + }); + var originalPopstate = window.onpopstate; + window.onpopstate = function (event) { + if (event.state && event.state.htmx) { + restoreHistory(); + forEach(restoredElts, function(elt){ + triggerEvent(elt, 'htmx:restored', { + 'document': getDocument(), + 'triggerEvent': triggerEvent + }); + }); + } else { + if (originalPopstate) { + originalPopstate(event); + } + } + }; + setTimeout(function () { + triggerEvent(body, 'htmx:load', {}); // give ready handlers a chance to load up before firing this event + body = null; // kill reference for gc + }, 0); + }) + + return htmx; + } +)() +})); diff --git a/assets/static/js/htmx/htmx.min.js b/assets/static/js/htmx/htmx.min.js new file mode 100644 index 0000000..daab078 --- /dev/null +++ b/assets/static/js/htmx/htmx.min.js @@ -0,0 +1 @@ +(function(e,t){if(typeof define==="function"&&define.amd){define([],t)}else if(typeof module==="object"&&module.exports){module.exports=t()}else{e.htmx=e.htmx||t()}})(typeof self!=="undefined"?self:this,function(){return function(){"use strict";var Y={onLoad:t,process:Dt,on:Z,off:K,trigger:fe,ajax:Cr,find:E,findAll:f,closest:d,values:function(e,t){var r=or(e,t||"post");return r.values},remove:B,addClass:F,removeClass:n,toggleClass:V,takeClass:j,defineExtension:Ar,removeExtension:Nr,logAll:X,logNone:U,logger:null,config:{historyEnabled:true,historyCacheSize:10,refreshOnHistoryMiss:false,defaultSwapStyle:"innerHTML",defaultSwapDelay:0,defaultSettleDelay:20,includeIndicatorStyles:true,indicatorClass:"htmx-indicator",requestClass:"htmx-request",addedClass:"htmx-added",settlingClass:"htmx-settling",swappingClass:"htmx-swapping",allowEval:true,allowScriptTags:true,inlineScriptNonce:"",attributesToSettle:["class","style","width","height"],withCredentials:false,timeout:0,wsReconnectDelay:"full-jitter",wsBinaryType:"blob",disableSelector:"[hx-disable], [data-hx-disable]",useTemplateFragments:false,scrollBehavior:"smooth",defaultFocusScroll:false,getCacheBusterParam:false,globalViewTransitions:false,methodsThatUseUrlParams:["get"],selfRequestsOnly:false,scrollIntoViewOnBoost:true},parseInterval:v,_:e,createEventSource:function(e){return new EventSource(e,{withCredentials:true})},createWebSocket:function(e){var t=new WebSocket(e,[]);t.binaryType=Y.config.wsBinaryType;return t},version:"1.9.7"};var r={addTriggerHandler:St,bodyContains:oe,canAccessLocalStorage:M,findThisElement:ve,filterValues:cr,hasAttribute:o,getAttributeValue:ee,getClosestAttributeValue:re,getClosestMatch:c,getExpressionVars:wr,getHeaders:fr,getInputValues:or,getInternalData:ie,getSwapSpecification:dr,getTriggerSpecs:Ze,getTarget:ge,makeFragment:l,mergeObjects:se,makeSettleInfo:T,oobSwap:ye,querySelectorExt:le,selectAndSwap:Ue,settleImmediately:Jt,shouldCancel:tt,triggerEvent:fe,triggerErrorEvent:ue,withExtensions:C};var b=["get","post","put","delete","patch"];var w=b.map(function(e){return"[hx-"+e+"], [data-hx-"+e+"]"}).join(", ");function v(e){if(e==undefined){return undefined}if(e.slice(-2)=="ms"){return parseFloat(e.slice(0,-2))||undefined}if(e.slice(-1)=="s"){return parseFloat(e.slice(0,-1))*1e3||undefined}if(e.slice(-1)=="m"){return parseFloat(e.slice(0,-1))*1e3*60||undefined}return parseFloat(e)||undefined}function Q(e,t){return e.getAttribute&&e.getAttribute(t)}function o(e,t){return e.hasAttribute&&(e.hasAttribute(t)||e.hasAttribute("data-"+t))}function ee(e,t){return Q(e,t)||Q(e,"data-"+t)}function u(e){return e.parentElement}function te(){return document}function c(e,t){while(e&&!t(e)){e=u(e)}return e?e:null}function R(e,t,r){var n=ee(t,r);var i=ee(t,"hx-disinherit");if(e!==t&&i&&(i==="*"||i.split(" ").indexOf(r)>=0)){return"unset"}else{return n}}function re(t,r){var n=null;c(t,function(e){return n=R(t,e,r)});if(n!=="unset"){return n}}function h(e,t){var r=e.matches||e.matchesSelector||e.msMatchesSelector||e.mozMatchesSelector||e.webkitMatchesSelector||e.oMatchesSelector;return r&&r.call(e,t)}function q(e){var t=/<([a-z][^\/\0>\x20\t\r\n\f]*)/i;var r=t.exec(e);if(r){return r[1].toLowerCase()}else{return""}}function i(e,t){var r=new DOMParser;var n=r.parseFromString(e,"text/html");var i=n.body;while(t>0){t--;i=i.firstChild}if(i==null){i=te().createDocumentFragment()}return i}function H(e){return e.match(/",0);return r.querySelector("template").content}else{var n=q(e);switch(n){case"thead":case"tbody":case"tfoot":case"colgroup":case"caption":return i(""+e+"
    ",1);case"col":return i(""+e+"
    ",2);case"tr":return i(""+e+"
    ",2);case"td":case"th":return i(""+e+"
    ",3);case"script":case"style":return i("
    "+e+"
    ",1);default:return i(e,0)}}}function ne(e){if(e){e()}}function L(e,t){return Object.prototype.toString.call(e)==="[object "+t+"]"}function A(e){return L(e,"Function")}function N(e){return L(e,"Object")}function ie(e){var t="htmx-internal-data";var r=e[t];if(!r){r=e[t]={}}return r}function I(e){var t=[];if(e){for(var r=0;r=0}function oe(e){if(e.getRootNode&&e.getRootNode()instanceof window.ShadowRoot){return te().body.contains(e.getRootNode().host)}else{return te().body.contains(e)}}function P(e){return e.trim().split(/\s+/)}function se(e,t){for(var r in t){if(t.hasOwnProperty(r)){e[r]=t[r]}}return e}function S(e){try{return JSON.parse(e)}catch(e){y(e);return null}}function M(){var e="htmx:localStorageTest";try{localStorage.setItem(e,e);localStorage.removeItem(e);return true}catch(e){return false}}function D(t){try{var e=new URL(t);if(e){t=e.pathname+e.search}if(!t.match("^/$")){t=t.replace(/\/+$/,"")}return t}catch(e){return t}}function e(e){return xr(te().body,function(){return eval(e)})}function t(t){var e=Y.on("htmx:load",function(e){t(e.detail.elt)});return e}function X(){Y.logger=function(e,t,r){if(console){console.log(t,e,r)}}}function U(){Y.logger=null}function E(e,t){if(t){return e.querySelector(t)}else{return E(te(),e)}}function f(e,t){if(t){return e.querySelectorAll(t)}else{return f(te(),e)}}function B(e,t){e=s(e);if(t){setTimeout(function(){B(e);e=null},t)}else{e.parentElement.removeChild(e)}}function F(e,t,r){e=s(e);if(r){setTimeout(function(){F(e,t);e=null},r)}else{e.classList&&e.classList.add(t)}}function n(e,t,r){e=s(e);if(r){setTimeout(function(){n(e,t);e=null},r)}else{if(e.classList){e.classList.remove(t);if(e.classList.length===0){e.removeAttribute("class")}}}}function V(e,t){e=s(e);e.classList.toggle(t)}function j(e,t){e=s(e);ae(e.parentElement.children,function(e){n(e,t)});F(e,t)}function d(e,t){e=s(e);if(e.closest){return e.closest(t)}else{do{if(e==null||h(e,t)){return e}}while(e=e&&u(e));return null}}function g(e,t){return e.substring(0,t.length)===t}function _(e,t){return e.substring(e.length-t.length)===t}function z(e){var t=e.trim();if(g(t,"<")&&_(t,"/>")){return t.substring(1,t.length-2)}else{return t}}function W(e,t){if(t.indexOf("closest ")===0){return[d(e,z(t.substr(8)))]}else if(t.indexOf("find ")===0){return[E(e,z(t.substr(5)))]}else if(t==="next"){return[e.nextElementSibling]}else if(t.indexOf("next ")===0){return[$(e,z(t.substr(5)))]}else if(t==="previous"){return[e.previousElementSibling]}else if(t.indexOf("previous ")===0){return[G(e,z(t.substr(9)))]}else if(t==="document"){return[document]}else if(t==="window"){return[window]}else if(t==="body"){return[document.body]}else{return te().querySelectorAll(z(t))}}var $=function(e,t){var r=te().querySelectorAll(t);for(var n=0;n=0;n--){var i=r[n];if(i.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING){return i}}};function le(e,t){if(t){return W(e,t)[0]}else{return W(te().body,e)[0]}}function s(e){if(L(e,"String")){return E(e)}else{return e}}function J(e,t,r){if(A(t)){return{target:te().body,event:e,listener:t}}else{return{target:s(e),event:t,listener:r}}}function Z(t,r,n){Pr(function(){var e=J(t,r,n);e.target.addEventListener(e.event,e.listener)});var e=A(r);return e?r:n}function K(t,r,n){Pr(function(){var e=J(t,r,n);e.target.removeEventListener(e.event,e.listener)});return A(r)?r:n}var he=te().createElement("output");function de(e,t){var r=re(e,t);if(r){if(r==="this"){return[ve(e,t)]}else{var n=W(e,r);if(n.length===0){y('The selector "'+r+'" on '+t+" returned no matches!");return[he]}else{return n}}}}function ve(e,t){return c(e,function(e){return ee(e,t)!=null})}function ge(e){var t=re(e,"hx-target");if(t){if(t==="this"){return ve(e,"hx-target")}else{return le(e,t)}}else{var r=ie(e);if(r.boosted){return te().body}else{return e}}}function me(e){var t=Y.config.attributesToSettle;for(var r=0;r0){o=e.substr(0,e.indexOf(":"));t=e.substr(e.indexOf(":")+1,e.length)}else{o=e}var r=te().querySelectorAll(t);if(r){ae(r,function(e){var t;var r=i.cloneNode(true);t=te().createDocumentFragment();t.appendChild(r);if(!xe(o,e)){t=r}var n={shouldSwap:true,target:e,fragment:t};if(!fe(e,"htmx:oobBeforeSwap",n))return;e=n.target;if(n["shouldSwap"]){De(o,e,e,t,a)}ae(a.elts,function(e){fe(e,"htmx:oobAfterSwap",n)})});i.parentNode.removeChild(i)}else{i.parentNode.removeChild(i);ue(te().body,"htmx:oobErrorNoTarget",{content:i})}return e}function be(e,t,r){var n=re(e,"hx-select-oob");if(n){var i=n.split(",");for(let e=0;e0){var r=t.replace("'","\\'");var n=e.tagName.replace(":","\\:");var i=o.querySelector(n+"[id='"+r+"']");if(i&&i!==o){var a=e.cloneNode();pe(e,i);s.tasks.push(function(){pe(e,a)})}}})}function Ee(e){return function(){n(e,Y.config.addedClass);Dt(e);Ct(e);Ce(e);fe(e,"htmx:load")}}function Ce(e){var t="[autofocus]";var r=h(e,t)?e:e.querySelector(t);if(r!=null){r.focus()}}function a(e,t,r,n){Se(e,r,n);while(r.childNodes.length>0){var i=r.firstChild;F(i,Y.config.addedClass);e.insertBefore(i,t);if(i.nodeType!==Node.TEXT_NODE&&i.nodeType!==Node.COMMENT_NODE){n.tasks.push(Ee(i))}}}function Te(e,t){var r=0;while(r-1){var t=e.replace(/]*>|>)([\s\S]*?)<\/svg>/gim,"");var r=t.match(/]*>|>)([\s\S]*?)<\/title>/im);if(r){return r[2]}}}function Ue(e,t,r,n,i,a){i.title=Xe(n);var o=l(n);if(o){be(r,o,i);o=Me(r,o,a);we(o);return De(e,r,t,o,i)}}function Be(e,t,r){var n=e.getResponseHeader(t);if(n.indexOf("{")===0){var i=S(n);for(var a in i){if(i.hasOwnProperty(a)){var o=i[a];if(!N(o)){o={value:o}}fe(r,a,o)}}}else{var s=n.split(",");for(var l=0;l0){var o=t[0];if(o==="]"){n--;if(n===0){if(a===null){i=i+"true"}t.shift();i+=")})";try{var s=xr(e,function(){return Function(i)()},function(){return true});s.source=i;return s}catch(e){ue(te().body,"htmx:syntax:error",{error:e,source:i});return null}}}else if(o==="["){n++}if($e(o,a,r)){i+="(("+r+"."+o+") ? ("+r+"."+o+") : (window."+o+"))"}else{i=i+o}a=t.shift()}}}function x(e,t){var r="";while(e.length>0&&!e[0].match(t)){r+=e.shift()}return r}var Je="input, textarea, select";function Ze(e){var t=ee(e,"hx-trigger");var r=[];if(t){var n=We(t);do{x(n,ze);var i=n.length;var a=x(n,/[,\[\s]/);if(a!==""){if(a==="every"){var o={trigger:"every"};x(n,ze);o.pollInterval=v(x(n,/[,\[\s]/));x(n,ze);var s=Ge(e,n,"event");if(s){o.eventFilter=s}r.push(o)}else if(a.indexOf("sse:")===0){r.push({trigger:"sse",sseEvent:a.substr(4)})}else{var l={trigger:a};var s=Ge(e,n,"event");if(s){l.eventFilter=s}while(n.length>0&&n[0]!==","){x(n,ze);var u=n.shift();if(u==="changed"){l.changed=true}else if(u==="once"){l.once=true}else if(u==="consume"){l.consume=true}else if(u==="delay"&&n[0]===":"){n.shift();l.delay=v(x(n,p))}else if(u==="from"&&n[0]===":"){n.shift();var f=x(n,p);if(f==="closest"||f==="find"||f==="next"||f==="previous"){n.shift();var c=x(n,p);if(c.length>0){f+=" "+c}}l.from=f}else if(u==="target"&&n[0]===":"){n.shift();l.target=x(n,p)}else if(u==="throttle"&&n[0]===":"){n.shift();l.throttle=v(x(n,p))}else if(u==="queue"&&n[0]===":"){n.shift();l.queue=x(n,p)}else if((u==="root"||u==="threshold")&&n[0]===":"){n.shift();l[u]=x(n,p)}else{ue(e,"htmx:syntax:error",{token:n.shift()})}}r.push(l)}}if(n.length===i){ue(e,"htmx:syntax:error",{token:n.shift()})}x(n,ze)}while(n[0]===","&&n.shift())}if(r.length>0){return r}else if(h(e,"form")){return[{trigger:"submit"}]}else if(h(e,'input[type="button"], input[type="submit"]')){return[{trigger:"click"}]}else if(h(e,Je)){return[{trigger:"change"}]}else{return[{trigger:"click"}]}}function Ke(e){ie(e).cancelled=true}function Ye(e,t,r){var n=ie(e);n.timeout=setTimeout(function(){if(oe(e)&&n.cancelled!==true){if(!nt(r,e,Ut("hx:poll:trigger",{triggerSpec:r,target:e}))){t(e)}Ye(e,t,r)}},r.pollInterval)}function Qe(e){return location.hostname===e.hostname&&Q(e,"href")&&Q(e,"href").indexOf("#")!==0}function et(t,r,e){if(t.tagName==="A"&&Qe(t)&&(t.target===""||t.target==="_self")||t.tagName==="FORM"){r.boosted=true;var n,i;if(t.tagName==="A"){n="get";i=Q(t,"href")}else{var a=Q(t,"method");n=a?a.toLowerCase():"get";if(n==="get"){}i=Q(t,"action")}e.forEach(function(e){it(t,function(e,t){if(d(e,Y.config.disableSelector)){m(e);return}ce(n,i,e,t)},r,e,true)})}}function tt(e,t){if(e.type==="submit"||e.type==="click"){if(t.tagName==="FORM"){return true}if(h(t,'input[type="submit"], button')&&d(t,"form")!==null){return true}if(t.tagName==="A"&&t.href&&(t.getAttribute("href")==="#"||t.getAttribute("href").indexOf("#")!==0)){return true}}return false}function rt(e,t){return ie(e).boosted&&e.tagName==="A"&&t.type==="click"&&(t.ctrlKey||t.metaKey)}function nt(e,t,r){var n=e.eventFilter;if(n){try{return n.call(t,r)!==true}catch(e){ue(te().body,"htmx:eventFilter:error",{error:e,source:n.source});return true}}return false}function it(a,o,e,s,l){var u=ie(a);var t;if(s.from){t=W(a,s.from)}else{t=[a]}if(s.changed){t.forEach(function(e){var t=ie(e);t.lastValue=e.value})}ae(t,function(n){var i=function(e){if(!oe(a)){n.removeEventListener(s.trigger,i);return}if(rt(a,e)){return}if(l||tt(e,a)){e.preventDefault()}if(nt(s,a,e)){return}var t=ie(e);t.triggerSpec=s;if(t.handledFor==null){t.handledFor=[]}if(t.handledFor.indexOf(a)<0){t.handledFor.push(a);if(s.consume){e.stopPropagation()}if(s.target&&e.target){if(!h(e.target,s.target)){return}}if(s.once){if(u.triggeredOnce){return}else{u.triggeredOnce=true}}if(s.changed){var r=ie(n);if(r.lastValue===n.value){return}r.lastValue=n.value}if(u.delayed){clearTimeout(u.delayed)}if(u.throttle){return}if(s.throttle){if(!u.throttle){o(a,e);u.throttle=setTimeout(function(){u.throttle=null},s.throttle)}}else if(s.delay){u.delayed=setTimeout(function(){o(a,e)},s.delay)}else{fe(a,"htmx:trigger");o(a,e)}}};if(e.listenerInfos==null){e.listenerInfos=[]}e.listenerInfos.push({trigger:s.trigger,listener:i,on:n});n.addEventListener(s.trigger,i)})}var at=false;var ot=null;function st(){if(!ot){ot=function(){at=true};window.addEventListener("scroll",ot);setInterval(function(){if(at){at=false;ae(te().querySelectorAll("[hx-trigger='revealed'],[data-hx-trigger='revealed']"),function(e){lt(e)})}},200)}}function lt(t){if(!o(t,"data-hx-revealed")&&k(t)){t.setAttribute("data-hx-revealed","true");var e=ie(t);if(e.initHash){fe(t,"revealed")}else{t.addEventListener("htmx:afterProcessNode",function(e){fe(t,"revealed")},{once:true})}}}function ut(e,t,r){var n=P(r);for(var i=0;i=0){var t=dt(n);setTimeout(function(){ft(s,r,n+1)},t)}};t.onopen=function(e){n=0};ie(s).webSocket=t;t.addEventListener("message",function(e){if(ct(s)){return}var t=e.data;C(s,function(e){t=e.transformResponse(t,null,s)});var r=T(s);var n=l(t);var i=I(n.children);for(var a=0;a0){fe(u,"htmx:validation:halted",i);return}t.send(JSON.stringify(l));if(tt(e,u)){e.preventDefault()}})}else{ue(u,"htmx:noWebSocketSourceError")}}function dt(e){var t=Y.config.wsReconnectDelay;if(typeof t==="function"){return t(e)}if(t==="full-jitter"){var r=Math.min(e,6);var n=1e3*Math.pow(2,r);return n*Math.random()}y('htmx.config.wsReconnectDelay must either be a function or the string "full-jitter"')}function vt(e,t,r){var n=P(r);for(var i=0;i0){var o=n.shift();var s=o.match(/^\s*([a-zA-Z:\-\.]+:)(.*)/);if(a===0&&s){o.split(":");i=s[1].slice(0,-1);r[i]=s[2]}else{r[i]+=o}a+=Nt(o)}for(var l in r){It(e,l,r[l])}}}function Pt(t){Re(t);for(var e=0;eY.config.historyCacheSize){i.shift()}while(i.length>0){try{localStorage.setItem("htmx-history-cache",JSON.stringify(i));break}catch(e){ue(te().body,"htmx:historyCacheError",{cause:e,cache:i});i.shift()}}}function _t(e){if(!M()){return null}e=D(e);var t=S(localStorage.getItem("htmx-history-cache"))||[];for(var r=0;r=200&&this.status<400){fe(te().body,"htmx:historyCacheMissLoad",o);var e=l(this.response);e=e.querySelector("[hx-history-elt],[data-hx-history-elt]")||e;var t=Vt();var r=T(t);var n=Xe(this.response);if(n){var i=E("title");if(i){i.innerHTML=n}else{window.document.title=n}}Pe(t,e,r);Jt(r.tasks);Ft=a;fe(te().body,"htmx:historyRestore",{path:a,cacheMiss:true,serverResponse:this.response})}else{ue(te().body,"htmx:historyCacheMissLoadError",o)}};e.send()}function Kt(e){Wt();e=e||location.pathname+location.search;var t=_t(e);if(t){var r=l(t.content);var n=Vt();var i=T(n);Pe(n,r,i);Jt(i.tasks);document.title=t.title;setTimeout(function(){window.scrollTo(0,t.scroll)},0);Ft=e;fe(te().body,"htmx:historyRestore",{path:e,item:t})}else{if(Y.config.refreshOnHistoryMiss){window.location.reload(true)}else{Zt(e)}}}function Yt(e){var t=de(e,"hx-indicator");if(t==null){t=[e]}ae(t,function(e){var t=ie(e);t.requestCount=(t.requestCount||0)+1;e.classList["add"].call(e.classList,Y.config.requestClass)});return t}function Qt(e){var t=de(e,"hx-disabled-elt");if(t==null){t=[]}ae(t,function(e){var t=ie(e);t.requestCount=(t.requestCount||0)+1;e.setAttribute("disabled","")});return t}function er(e,t){ae(e,function(e){var t=ie(e);t.requestCount=(t.requestCount||0)-1;if(t.requestCount===0){e.classList["remove"].call(e.classList,Y.config.requestClass)}});ae(t,function(e){var t=ie(e);t.requestCount=(t.requestCount||0)-1;if(t.requestCount===0){e.removeAttribute("disabled")}})}function tr(e,t){for(var r=0;r=0}function dr(e,t){var r=t?t:re(e,"hx-swap");var n={swapStyle:ie(e).boosted?"innerHTML":Y.config.defaultSwapStyle,swapDelay:Y.config.defaultSwapDelay,settleDelay:Y.config.defaultSettleDelay};if(Y.config.scrollIntoViewOnBoost&&ie(e).boosted&&!hr(e)){n["show"]="top"}if(r){var i=P(r);if(i.length>0){for(var a=0;a0?l.join(":"):null;n["scroll"]=u;n["scrollTarget"]=f}else if(o.indexOf("show:")===0){var c=o.substr(5);var l=c.split(":");var h=l.pop();var f=l.length>0?l.join(":"):null;n["show"]=h;n["showTarget"]=f}else if(o.indexOf("focus-scroll:")===0){var d=o.substr("focus-scroll:".length);n["focusScroll"]=d=="true"}else if(a==0){n["swapStyle"]=o}else{y("Unknown modifier in hx-swap: "+o)}}}}return n}function vr(e){return re(e,"hx-encoding")==="multipart/form-data"||h(e,"form")&&Q(e,"enctype")==="multipart/form-data"}function gr(t,r,n){var i=null;C(r,function(e){if(i==null){i=e.encodeParameters(t,n,r)}});if(i!=null){return i}else{if(vr(r)){return ur(n)}else{return lr(n)}}}function T(e){return{tasks:[],elts:[e]}}function mr(e,t){var r=e[0];var n=e[e.length-1];if(t.scroll){var i=null;if(t.scrollTarget){i=le(r,t.scrollTarget)}if(t.scroll==="top"&&(r||i)){i=i||r;i.scrollTop=0}if(t.scroll==="bottom"&&(n||i)){i=i||n;i.scrollTop=i.scrollHeight}}if(t.show){var i=null;if(t.showTarget){var a=t.showTarget;if(t.showTarget==="window"){a="body"}i=le(r,a)}if(t.show==="top"&&(r||i)){i=i||r;i.scrollIntoView({block:"start",behavior:Y.config.scrollBehavior})}if(t.show==="bottom"&&(n||i)){i=i||n;i.scrollIntoView({block:"end",behavior:Y.config.scrollBehavior})}}}function pr(e,t,r,n){if(n==null){n={}}if(e==null){return n}var i=ee(e,t);if(i){var a=i.trim();var o=r;if(a==="unset"){return null}if(a.indexOf("javascript:")===0){a=a.substr(11);o=true}else if(a.indexOf("js:")===0){a=a.substr(3);o=true}if(a.indexOf("{")!==0){a="{"+a+"}"}var s;if(o){s=xr(e,function(){return Function("return ("+a+")")()},{})}else{s=S(a)}for(var l in s){if(s.hasOwnProperty(l)){if(n[l]==null){n[l]=s[l]}}}}return pr(u(e),t,r,n)}function xr(e,t,r){if(Y.config.allowEval){return t()}else{ue(e,"htmx:evalDisallowedError");return r}}function yr(e,t){return pr(e,"hx-vars",true,t)}function br(e,t){return pr(e,"hx-vals",false,t)}function wr(e){return se(yr(e),br(e))}function Sr(t,r,n){if(n!==null){try{t.setRequestHeader(r,n)}catch(e){t.setRequestHeader(r,encodeURIComponent(n));t.setRequestHeader(r+"-URI-AutoEncoded","true")}}}function Er(t){if(t.responseURL&&typeof URL!=="undefined"){try{var e=new URL(t.responseURL);return e.pathname+e.search}catch(e){ue(te().body,"htmx:badResponseUrl",{url:t.responseURL})}}}function O(e,t){return e.getAllResponseHeaders().match(t)}function Cr(e,t,r){e=e.toLowerCase();if(r){if(r instanceof Element||L(r,"String")){return ce(e,t,null,null,{targetOverride:s(r),returnPromise:true})}else{return ce(e,t,s(r.source),r.event,{handler:r.handler,headers:r.headers,values:r.values,targetOverride:s(r.target),swapOverride:r.swap,returnPromise:true})}}else{return ce(e,t,null,null,{returnPromise:true})}}function Tr(e){var t=[];while(e){t.push(e);e=e.parentElement}return t}function Or(e,t,r){var n;var i;if(typeof URL==="function"){i=new URL(t,document.location.href);var a=document.location.origin;n=a===i.origin}else{i=t;n=g(t,document.location.origin)}if(Y.config.selfRequestsOnly){if(!n){return false}}return fe(e,"htmx:validateUrl",se({url:i,sameHost:n},r))}function ce(t,r,n,i,a,e){var o=null;var s=null;a=a!=null?a:{};if(a.returnPromise&&typeof Promise!=="undefined"){var l=new Promise(function(e,t){o=e;s=t})}if(n==null){n=te().body}var M=a.handler||qr;if(!oe(n)){ne(o);return l}var u=a.targetOverride||ge(n);if(u==null||u==he){ue(n,"htmx:targetError",{target:ee(n,"hx-target")});ne(s);return l}var f=ie(n);var c=f.lastButtonClicked;if(c){var h=Q(c,"formaction");if(h!=null){r=h}var d=Q(c,"formmethod");if(d!=null){if(d.toLowerCase()!=="dialog"){t=d}}}var v=re(n,"hx-confirm");if(e===undefined){var D=function(e){return ce(t,r,n,i,a,!!e)};var X={target:u,elt:n,path:r,verb:t,triggeringEvent:i,etc:a,issueRequest:D,question:v};if(fe(n,"htmx:confirm",X)===false){ne(o);return l}}var g=n;var m=re(n,"hx-sync");var p=null;var x=false;if(m){var U=m.split(":");var B=U[0].trim();if(B==="this"){g=ve(n,"hx-sync")}else{g=le(n,B)}m=(U[1]||"drop").trim();f=ie(g);if(m==="drop"&&f.xhr&&f.abortable!==true){ne(o);return l}else if(m==="abort"){if(f.xhr){ne(o);return l}else{x=true}}else if(m==="replace"){fe(g,"htmx:abort")}else if(m.indexOf("queue")===0){var F=m.split(" ");p=(F[1]||"last").trim()}}if(f.xhr){if(f.abortable){fe(g,"htmx:abort")}else{if(p==null){if(i){var y=ie(i);if(y&&y.triggerSpec&&y.triggerSpec.queue){p=y.triggerSpec.queue}}if(p==null){p="last"}}if(f.queuedRequests==null){f.queuedRequests=[]}if(p==="first"&&f.queuedRequests.length===0){f.queuedRequests.push(function(){ce(t,r,n,i,a)})}else if(p==="all"){f.queuedRequests.push(function(){ce(t,r,n,i,a)})}else if(p==="last"){f.queuedRequests=[];f.queuedRequests.push(function(){ce(t,r,n,i,a)})}ne(o);return l}}var b=new XMLHttpRequest;f.xhr=b;f.abortable=x;var w=function(){f.xhr=null;f.abortable=false;if(f.queuedRequests!=null&&f.queuedRequests.length>0){var e=f.queuedRequests.shift();e()}};var V=re(n,"hx-prompt");if(V){var S=prompt(V);if(S===null||!fe(n,"htmx:prompt",{prompt:S,target:u})){ne(o);w();return l}}if(v&&!e){if(!confirm(v)){ne(o);w();return l}}var E=fr(n,u,S);if(a.headers){E=se(E,a.headers)}var j=or(n,t);var C=j.errors;var T=j.values;if(a.values){T=se(T,a.values)}var _=wr(n);var z=se(T,_);var O=cr(z,n);if(t!=="get"&&!vr(n)){E["Content-Type"]="application/x-www-form-urlencoded"}if(Y.config.getCacheBusterParam&&t==="get"){O["org.htmx.cache-buster"]=Q(u,"id")||"true"}if(r==null||r===""){r=te().location.href}var R=pr(n,"hx-request");var W=ie(n).boosted;var q=Y.config.methodsThatUseUrlParams.indexOf(t)>=0;var H={boosted:W,useUrlParams:q,parameters:O,unfilteredParameters:z,headers:E,target:u,verb:t,errors:C,withCredentials:a.credentials||R.credentials||Y.config.withCredentials,timeout:a.timeout||R.timeout||Y.config.timeout,path:r,triggeringEvent:i};if(!fe(n,"htmx:configRequest",H)){ne(o);w();return l}r=H.path;t=H.verb;E=H.headers;O=H.parameters;C=H.errors;q=H.useUrlParams;if(C&&C.length>0){fe(n,"htmx:validation:halted",H);ne(o);w();return l}var $=r.split("#");var G=$[0];var L=$[1];var A=r;if(q){A=G;var J=Object.keys(O).length!==0;if(J){if(A.indexOf("?")<0){A+="?"}else{A+="&"}A+=lr(O);if(L){A+="#"+L}}}if(!Or(n,A,H)){ue(n,"htmx:invalidPath",H);ne(s);return l}b.open(t.toUpperCase(),A,true);b.overrideMimeType("text/html");b.withCredentials=H.withCredentials;b.timeout=H.timeout;if(R.noHeaders){}else{for(var N in E){if(E.hasOwnProperty(N)){var Z=E[N];Sr(b,N,Z)}}}var I={xhr:b,target:u,requestConfig:H,etc:a,boosted:W,pathInfo:{requestPath:r,finalRequestPath:A,anchor:L}};b.onload=function(){try{var e=Tr(n);I.pathInfo.responsePath=Er(b);M(n,I);er(k,P);fe(n,"htmx:afterRequest",I);fe(n,"htmx:afterOnLoad",I);if(!oe(n)){var t=null;while(e.length>0&&t==null){var r=e.shift();if(oe(r)){t=r}}if(t){fe(t,"htmx:afterRequest",I);fe(t,"htmx:afterOnLoad",I)}}ne(o);w()}catch(e){ue(n,"htmx:onLoadError",se({error:e},I));throw e}};b.onerror=function(){er(k,P);ue(n,"htmx:afterRequest",I);ue(n,"htmx:sendError",I);ne(s);w()};b.onabort=function(){er(k,P);ue(n,"htmx:afterRequest",I);ue(n,"htmx:sendAbort",I);ne(s);w()};b.ontimeout=function(){er(k,P);ue(n,"htmx:afterRequest",I);ue(n,"htmx:timeout",I);ne(s);w()};if(!fe(n,"htmx:beforeRequest",I)){ne(o);w();return l}var k=Yt(n);var P=Qt(n);ae(["loadstart","loadend","progress","abort"],function(t){ae([b,b.upload],function(e){e.addEventListener(t,function(e){fe(n,"htmx:xhr:"+t,{lengthComputable:e.lengthComputable,loaded:e.loaded,total:e.total})})})});fe(n,"htmx:beforeSend",I);var K=q?null:gr(b,n,O);b.send(K);return l}function Rr(e,t){var r=t.xhr;var n=null;var i=null;if(O(r,/HX-Push:/i)){n=r.getResponseHeader("HX-Push");i="push"}else if(O(r,/HX-Push-Url:/i)){n=r.getResponseHeader("HX-Push-Url");i="push"}else if(O(r,/HX-Replace-Url:/i)){n=r.getResponseHeader("HX-Replace-Url");i="replace"}if(n){if(n==="false"){return{}}else{return{type:i,path:n}}}var a=t.pathInfo.finalRequestPath;var o=t.pathInfo.responsePath;var s=re(e,"hx-push-url");var l=re(e,"hx-replace-url");var u=ie(e).boosted;var f=null;var c=null;if(s){f="push";c=s}else if(l){f="replace";c=l}else if(u){f="push";c=o||a}if(c){if(c==="false"){return{}}if(c==="true"){c=o||a}if(t.pathInfo.anchor&&c.indexOf("#")===-1){c=c+"#"+t.pathInfo.anchor}return{type:f,path:c}}else{return{}}}function qr(l,u){var f=u.xhr;var c=u.target;var e=u.etc;var t=u.requestConfig;if(!fe(l,"htmx:beforeOnLoad",u))return;if(O(f,/HX-Trigger:/i)){Be(f,"HX-Trigger",l)}if(O(f,/HX-Location:/i)){Wt();var r=f.getResponseHeader("HX-Location");var h;if(r.indexOf("{")===0){h=S(r);r=h["path"];delete h["path"]}Cr("GET",r,h).then(function(){$t(r)});return}var n=O(f,/HX-Refresh:/i)&&"true"===f.getResponseHeader("HX-Refresh");if(O(f,/HX-Redirect:/i)){location.href=f.getResponseHeader("HX-Redirect");n&&location.reload();return}if(n){location.reload();return}if(O(f,/HX-Retarget:/i)){u.target=te().querySelector(f.getResponseHeader("HX-Retarget"))}var d=Rr(l,u);var i=f.status>=200&&f.status<400&&f.status!==204;var v=f.response;var a=f.status>=400;var g=Y.config.ignoreTitle;var o=se({shouldSwap:i,serverResponse:v,isError:a,ignoreTitle:g},u);if(!fe(c,"htmx:beforeSwap",o))return;c=o.target;v=o.serverResponse;a=o.isError;g=o.ignoreTitle;u.target=c;u.failed=a;u.successful=!a;if(o.shouldSwap){if(f.status===286){Ke(l)}C(l,function(e){v=e.transformResponse(v,f,l)});if(d.type){Wt()}var s=e.swapOverride;if(O(f,/HX-Reswap:/i)){s=f.getResponseHeader("HX-Reswap")}var h=dr(l,s);if(h.hasOwnProperty("ignoreTitle")){g=h.ignoreTitle}c.classList.add(Y.config.swappingClass);var m=null;var p=null;var x=function(){try{var e=document.activeElement;var t={};try{t={elt:e,start:e?e.selectionStart:null,end:e?e.selectionEnd:null}}catch(e){}var r;if(O(f,/HX-Reselect:/i)){r=f.getResponseHeader("HX-Reselect")}var n=T(c);Ue(h.swapStyle,c,l,v,n,r);if(t.elt&&!oe(t.elt)&&Q(t.elt,"id")){var i=document.getElementById(Q(t.elt,"id"));var a={preventScroll:h.focusScroll!==undefined?!h.focusScroll:!Y.config.defaultFocusScroll};if(i){if(t.start&&i.setSelectionRange){try{i.setSelectionRange(t.start,t.end)}catch(e){}}i.focus(a)}}c.classList.remove(Y.config.swappingClass);ae(n.elts,function(e){if(e.classList){e.classList.add(Y.config.settlingClass)}fe(e,"htmx:afterSwap",u)});if(O(f,/HX-Trigger-After-Swap:/i)){var o=l;if(!oe(l)){o=te().body}Be(f,"HX-Trigger-After-Swap",o)}var s=function(){ae(n.tasks,function(e){e.call()});ae(n.elts,function(e){if(e.classList){e.classList.remove(Y.config.settlingClass)}fe(e,"htmx:afterSettle",u)});if(d.type){fe(te().body,"htmx:beforeHistoryUpdate",se({history:d},u));if(d.type==="push"){$t(d.path);fe(te().body,"htmx:pushedIntoHistory",{path:d.path})}else{Gt(d.path);fe(te().body,"htmx:replacedInHistory",{path:d.path})}}if(u.pathInfo.anchor){var e=te().getElementById(u.pathInfo.anchor);if(e){e.scrollIntoView({block:"start",behavior:"auto"})}}if(n.title&&!g){var t=E("title");if(t){t.innerHTML=n.title}else{window.document.title=n.title}}mr(n.elts,h);if(O(f,/HX-Trigger-After-Settle:/i)){var r=l;if(!oe(l)){r=te().body}Be(f,"HX-Trigger-After-Settle",r)}ne(m)};if(h.settleDelay>0){setTimeout(s,h.settleDelay)}else{s()}}catch(e){ue(l,"htmx:swapError",u);ne(p);throw e}};var y=Y.config.globalViewTransitions;if(h.hasOwnProperty("transition")){y=h.transition}if(y&&fe(l,"htmx:beforeTransition",u)&&typeof Promise!=="undefined"&&document.startViewTransition){var b=new Promise(function(e,t){m=e;p=t});var w=x;x=function(){document.startViewTransition(function(){w();return b})}}if(h.swapDelay>0){setTimeout(x,h.swapDelay)}else{x()}}if(a){ue(l,"htmx:responseError",se({error:"Response Status Error Code "+f.status+" from "+u.pathInfo.requestPath},u))}}var Hr={};function Lr(){return{init:function(e){return null},onEvent:function(e,t){return true},transformResponse:function(e,t,r){return e},isInlineSwap:function(e){return false},handleSwap:function(e,t,r,n){return false},encodeParameters:function(e,t,r){return null}}}function Ar(e,t){if(t.init){t.init(r)}Hr[e]=se(Lr(),t)}function Nr(e){delete Hr[e]}function Ir(e,r,n){if(e==undefined){return r}if(r==undefined){r=[]}if(n==undefined){n=[]}var t=ee(e,"hx-ext");if(t){ae(t.split(","),function(e){e=e.replace(/ /g,"");if(e.slice(0,7)=="ignore:"){n.push(e.slice(7));return}if(n.indexOf(e)<0){var t=Hr[e];if(t&&r.indexOf(t)<0){r.push(t)}}})}return Ir(u(e),r,n)}var kr=false;te().addEventListener("DOMContentLoaded",function(){kr=true});function Pr(e){if(kr||te().readyState==="complete"){e()}else{te().addEventListener("DOMContentLoaded",e)}}function Mr(){if(Y.config.includeIndicatorStyles!==false){te().head.insertAdjacentHTML("beforeend","")}}function Dr(){var e=te().querySelector('meta[name="htmx-config"]');if(e){return S(e.content)}else{return null}}function Xr(){var e=Dr();if(e){Y.config=se(Y.config,e)}}Pr(function(){Xr();Mr();var e=te().body;Dt(e);var t=te().querySelectorAll("[hx-trigger='restored'],[data-hx-trigger='restored']");e.addEventListener("htmx:abort",function(e){var t=e.target;var r=ie(t);if(r&&r.xhr){r.xhr.abort()}});var r=window.onpopstate;window.onpopstate=function(e){if(e.state&&e.state.htmx){Kt();ae(t,function(e){fe(e,"htmx:restored",{document:te(),triggerEvent:fe})})}else{if(r){r(e)}}};setTimeout(function(){fe(e,"htmx:load",{});e=null},0)});return Y}()}); \ No newline at end of file diff --git a/assets/static/js/htmx/htmx.min.js.gz b/assets/static/js/htmx/htmx.min.js.gz new file mode 100644 index 0000000000000000000000000000000000000000..7f7945c31b57cdbb21ba3f1a6ef4d47b69846591 GIT binary patch literal 15236 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 KQi@?xwg3R-A*h!C literal 0 HcmV?d00001 diff --git a/assets/static/js/htmx/htmx.test.ts b/assets/static/js/htmx/htmx.test.ts new file mode 100644 index 0000000..71ed2d2 --- /dev/null +++ b/assets/static/js/htmx/htmx.test.ts @@ -0,0 +1,96 @@ +import htmx from "./htmx"; + +// add the class 'myClass' to the element with the id 'demo' +htmx.addClass(htmx.find("#demo"), "myClass"); + +// issue a GET to /example and put the response HTML into #myDiv +htmx.ajax("GET", "/example", "#myDiv"); + +// find the closest enclosing div of the element with the id 'demo' +htmx.closest(htmx.find("#demo"), "div"); + +// update the history cache size to 30 +htmx.config.historyCacheSize = 30; + +// override SSE event sources to not use credentials +htmx.createEventSource = function (url) { + return new EventSource(url, { withCredentials: false }); +}; + +// override WebSocket to use a specific protocol +htmx.createWebSocket = function (url) { + return new WebSocket(url, ["wss"]); +}; + +// defines a silly extension that just logs the name of all events triggered +htmx.defineExtension("silly", { + onEvent: function (name, evt) { + console.log("Event " + name + " was triggered!"); + } +}); + +// find div with id my-div +var div = htmx.find("#my-div"); + +// find div with id another-div within that div +var anotherDiv = htmx.find(div, "#another-div"); + +// find all divs +var allDivs = htmx.findAll("div"); + +// find all paragraphs within a given div +var allParagraphsInMyDiv = htmx.findAll(htmx.find("#my-div"), "p"); + +htmx.logAll(); + +// remove this click listener from the body +htmx.off("click", myEventListener); + +// remove this click listener from the given div +htmx.off("#my-div", "click", myEventListener); + +// add a click listener to the body +var myEventListener = htmx.on("click", function (evt) { + console.log(evt); +}); + +// add a click listener to the given div +var myEventListener = htmx.on("#my-div", "click", function (evt) { + console.log(evt); +}); + +const MyLibrary: any = null; + +htmx.onLoad(function (elt) { + MyLibrary.init(elt); +}); + +// returns 3000 +var milliseconds = htmx.parseInterval("3s"); + +// returns 3 - Caution +var milliseconds = htmx.parseInterval("3m"); + +document.body.innerHTML = "
    Get it!
    "; +// process the newly added content +htmx.process(document.body); + +// removes my-div from the DOM +htmx.remove(htmx.find("#my-div")); + +// removes .myClass from my-div +htmx.removeClass(htmx.find("#my-div"), "myClass"); + +htmx.removeExtension("my-extension"); + +// takes the selected class from tab2"s siblings +htmx.takeClass(htmx.find("#tab2"), "selected"); + +// toggles the selected class on tab2 +htmx.toggleClass(htmx.find("#tab2"), "selected"); + +// triggers the myEvent event on #tab2 with the answer 42 +htmx.trigger(htmx.find("#tab2"), "myEvent", { answer: 42 }); + +// gets the values associated with this form +var values = htmx.values(htmx.find("#myForm")); diff --git a/assets/static/js/hyperscript.min.js b/assets/static/js/hyperscript.min.js new file mode 100644 index 0000000..355c78a --- /dev/null +++ b/assets/static/js/hyperscript.min.js @@ -0,0 +1 @@ +(function(e,t){const r=t(e);if(typeof exports==="object"&&typeof exports["nodeName"]!=="string"){module.exports=r}else{e["_hyperscript"]=r;if("document"in e)e["_hyperscript"].browserInit()}})(typeof self!=="undefined"?self:this,(e=>{"use strict";const t={dynamicResolvers:[function(e,t){if(e==="Fixed"){return Number(t).toFixed()}else if(e.indexOf("Fixed:")===0){let r=e.split(":")[1];return Number(t).toFixed(parseInt(r))}}],String:function(e){if(e.toString){return e.toString()}else{return""+e}},Int:function(e){return parseInt(e)},Float:function(e){return parseFloat(e)},Number:function(e){return Number(e)},Date:function(e){return new Date(e)},Array:function(e){return Array.from(e)},JSON:function(e){return JSON.stringify(e)},Object:function(e){if(e instanceof String){e=e.toString()}if(typeof e==="string"){return JSON.parse(e)}else{return Object.assign({},e)}}};const r={attributes:"_, script, data-script",defaultTransition:"all 500ms ease-in",disableSelector:"[disable-scripting], [data-disable-scripting]",hideShowStrategies:{},conversions:t};class n{static OP_TABLE={"+":"PLUS","-":"MINUS","*":"MULTIPLY","/":"DIVIDE",".":"PERIOD","..":"ELLIPSIS","\\":"BACKSLASH",":":"COLON","%":"PERCENT","|":"PIPE","!":"EXCLAMATION","?":"QUESTION","#":"POUND","&":"AMPERSAND",$:"DOLLAR",";":"SEMI",",":"COMMA","(":"L_PAREN",")":"R_PAREN","<":"L_ANG",">":"R_ANG","<=":"LTE_ANG",">=":"GTE_ANG","==":"EQ","===":"EQQ","!=":"NEQ","!==":"NEQQ","{":"L_BRACE","}":"R_BRACE","[":"L_BRACKET","]":"R_BRACKET","=":"EQUALS"};static isValidCSSClassChar(e){return n.isAlpha(e)||n.isNumeric(e)||e==="-"||e==="_"||e===":"}static isValidCSSIDChar(e){return n.isAlpha(e)||n.isNumeric(e)||e==="-"||e==="_"||e===":"}static isWhitespace(e){return e===" "||e==="\t"||n.isNewline(e)}static positionString(e){return"[Line: "+e.line+", Column: "+e.column+"]"}static isNewline(e){return e==="\r"||e==="\n"}static isNumeric(e){return e>="0"&&e<="9"}static isAlpha(e){return e>="a"&&e<="z"||e>="A"&&e<="Z"}static isIdentifierChar(e,t){return e==="_"||e==="$"}static isReservedChar(e){return e==="`"||e==="^"}static isValidSingleQuoteStringStart(e){if(e.length>0){var t=e[e.length-1];if(t.type==="IDENTIFIER"||t.type==="CLASS_REF"||t.type==="ID_REF"){return false}if(t.op&&(t.value===">"||t.value===")")){return false}}return true}static tokenize(e,t){var r=[];var a=e;var o=0;var s=0;var u=1;var l="";var c=0;function f(){return t&&c===0}while(o=0){return this.consumeToken()}}requireToken(e,t){var r=this.matchToken(e,t);if(r){return r}else{this.raiseError(this,"Expected '"+e+"' but found '"+this.currentToken().value+"'")}}peekToken(e,t,r){t=t||0;r=r||"IDENTIFIER";if(this.tokens[t]&&this.tokens[t].value===e&&this.tokens[t].type===r){return this.tokens[t]}}matchToken(e,t){if(this.follows.indexOf(e)!==-1){return}t=t||"IDENTIFIER";if(this.currentToken()&&this.currentToken().value===e&&this.currentToken().type===t){return this.consumeToken()}}consumeToken(){var e=this.tokens.shift();this.consumed.push(e);this._lastConsumed=e;this.consumeWhitespace();return e}consumeUntil(e,t){var r=[];var n=this.token(0,true);while((t==null||n.type!==t)&&(e==null||n.value!==e)&&n.type!=="EOF"){var i=this.tokens.shift();this.consumed.push(i);r.push(n);n=this.token(0,true)}this.consumeWhitespace();return r}lastWhitespace(){if(this.consumed[this.consumed.length-1]&&this.consumed[this.consumed.length-1].type==="WHITESPACE"){return this.consumed[this.consumed.length-1].value}else{return""}}consumeUntilWhitespace(){return this.consumeUntil(null,"WHITESPACE")}hasMore(){return this.tokens.length>0}token(e,t){var r;var n=0;do{if(!t){while(this.tokens[n]&&this.tokens[n].type==="WHITESPACE"){n++}}r=this.tokens[n];e--;n++}while(e>-1);if(r){return r}else{return{type:"EOF",value:"<<>>"}}}currentToken(){return this.token(0)}lastMatch(){return this._lastConsumed}static sourceFor=function(){return this.programSource.substring(this.startToken.start,this.endToken.end)};static lineFor=function(){return this.programSource.split("\n")[this.startToken.line-1]};follows=[];pushFollow(e){this.follows.push(e)}popFollow(){this.follows.pop()}clearFollows(){var e=this.follows;this.follows=[];return e}restoreFollows(e){this.follows=e}}class a{constructor(e){this.runtime=e;this.possessivesDisabled=false;this.addGrammarElement("feature",(function(e,t,r){if(r.matchOpToken("(")){var n=e.requireElement("feature",r);r.requireOpToken(")");return n}var i=e.FEATURES[r.currentToken().value||""];if(i){return i(e,t,r)}}));this.addGrammarElement("command",(function(e,t,r){if(r.matchOpToken("(")){const t=e.requireElement("command",r);r.requireOpToken(")");return t}var n=e.COMMANDS[r.currentToken().value||""];let i;if(n){i=n(e,t,r)}else if(r.currentToken().type==="IDENTIFIER"){i=e.parseElement("pseudoCommand",r)}if(i){return e.parseElement("indirectStatement",r,i)}return i}));this.addGrammarElement("commandList",(function(e,t,r){if(r.hasMore()){var n=e.parseElement("command",r);if(n){r.matchToken("then");const t=e.parseElement("commandList",r);if(t)n.next=t;return n}}return{type:"emptyCommandListCommand",op:function(e){return t.findNext(this,e)},execute:function(e){return t.unifiedExec(this,e)}}}));this.addGrammarElement("leaf",(function(e,t,r){var n=e.parseAnyOf(e.LEAF_EXPRESSIONS,r);if(n==null){return e.parseElement("symbol",r)}return n}));this.addGrammarElement("indirectExpression",(function(e,t,r,n){for(var i=0;i{this.unifiedExec(e,t)})).catch((e=>{this.unifiedExec({op:function(){throw e}},t)}));return}else if(r===o.HALT){if(t.meta.finallyHandler&&!t.meta.handlingFinally){t.meta.handlingFinally=true;e=t.meta.finallyHandler}else{if(t.meta.onHalt){t.meta.onHalt()}if(t.meta.currentException){if(t.meta.reject){t.meta.reject(t.meta.currentException);return}else{throw t.meta.currentException}}else{return}}}else{e=r}}}unifiedEval(e,t){var r=[t];var n=false;var i=false;if(e.args){for(var a=0;a{r=this.wrapArrays(r);Promise.all(r).then((function(r){if(i){this.unwrapAsyncs(r)}try{var a=e.op.apply(e,r);t(a)}catch(e){n(e)}})).catch((function(e){n(e)}))}))}else{if(i){this.unwrapAsyncs(r)}return e.op.apply(e,r)}}_scriptAttrs=null;getScriptAttributes(){if(this._scriptAttrs==null){this._scriptAttrs=r.attributes.replace(/ /g,"").split(",")}return this._scriptAttrs}getScript(e){for(var t=0;t{this.initElement(e,e instanceof HTMLScriptElement&&e.type==="text/hyperscript"?document.body:e)}))}}initElement(e,t){if(e.closest&&e.closest(r.disableSelector)){return}var n=this.getInternalData(e);if(!n.initialized){var i=this.getScript(e);if(i){try{n.initialized=true;n.script=i;const r=this.lexer,s=this.parser;var a=r.tokenize(i);var o=s.parseHyperScript(a);if(!o)return;o.apply(t||e,e);setTimeout((()=>{this.triggerEvent(t||e,"load",{hyperscript:true})}),1)}catch(t){this.triggerEvent(e,"exception",{error:t});console.error("hyperscript errors were found on the following element:",e,"\n\n",t.message,t.stack)}}}}internalDataMap=new WeakMap;getInternalData(e){var t=this.internalDataMap.get(e);if(typeof t==="undefined"){this.internalDataMap.set(e,t={})}return t}typeCheck(e,t,r){if(e==null&&r){return true}var n=Object.prototype.toString.call(e).slice(8,-1);return n===t}getElementScope(e){var t=e.meta&&e.meta.owner;if(t){var r=this.getInternalData(t);var n="elementScope";if(e.meta.feature&&e.meta.feature.behavior){n=e.meta.feature.behavior+"Scope"}var i=h(r,n);return i}else{return{}}}isReservedWord(e){return["meta","it","result","locals","event","target","detail","sender","body"].includes(e)}isHyperscriptContext(e){return e instanceof f}resolveSymbol(t,r,n){if(t==="me"||t==="my"||t==="I"){return r.me}if(t==="it"||t==="its"||t==="result"){return r.result}if(t==="you"||t==="your"||t==="yourself"){return r.you}else{if(n==="global"){return e[t]}else if(n==="element"){var i=this.getElementScope(r);return i[t]}else if(n==="local"){return r.locals[t]}else{if(r.meta&&r.meta.context){var a=r.meta.context[t];if(typeof a!=="undefined"){return a}if(r.meta.context.detail){a=r.meta.context.detail[t];if(typeof a!=="undefined"){return a}}}if(this.isHyperscriptContext(r)&&!this.isReservedWord(t)){var o=r.locals[t]}else{var o=r[t]}if(typeof o!=="undefined"){return o}else{var i=this.getElementScope(r);o=i[t];if(typeof o!=="undefined"){return o}else{return e[t]}}}}}setSymbol(t,r,n,i){if(n==="global"){e[t]=i}else if(n==="element"){var a=this.getElementScope(r);a[t]=i}else if(n==="local"){r.locals[t]=i}else{if(this.isHyperscriptContext(r)&&!this.isReservedWord(t)&&typeof r.locals[t]!=="undefined"){r.locals[t]=i}else{var a=this.getElementScope(r);var o=a[t];if(typeof o!=="undefined"){a[t]=i}else{if(this.isHyperscriptContext(r)&&!this.isReservedWord(t)){r.locals[t]=i}else{r[t]=i}}}}}findNext(e,t){if(e){if(e.resolveNext){return e.resolveNext(t)}else if(e.next){return e.next}else{return this.findNext(e.parent,t)}}}flatGet(e,t,r){if(e!=null){var n=r(e,t);if(typeof n!=="undefined"){return n}if(this.shouldAutoIterate(e)){var i=[];for(var a of e){var o=r(a,t);i.push(o)}return i}}}resolveProperty(e,t){return this.flatGet(e,t,((e,t)=>e[t]))}resolveAttribute(e,t){return this.flatGet(e,t,((e,t)=>e.getAttribute&&e.getAttribute(t)))}resolveStyle(e,t){return this.flatGet(e,t,((e,t)=>e.style&&e.style[t]))}resolveComputedStyle(e,t){return this.flatGet(e,t,((e,t)=>getComputedStyle(e).getPropertyValue(t)))}assignToNamespace(t,r,n,i){let a;if(typeof document!=="undefined"&&t===document.body){a=e}else{a=this.getHyperscriptFeatures(t)}var o;while((o=r.shift())!==undefined){var s=a[o];if(s==null){s={};a[o]=s}a=s}a[n]=i}getHyperTrace(e,t){var r=[];var n=e;while(n.meta.caller){n=n.meta.caller}if(n.meta.traceMap){return n.meta.traceMap.get(t,r)}}registerHyperTrace(e,t){var r=[];var n=null;while(e!=null){r.push(e);n=e;e=e.meta.caller}if(n.meta.traceMap==null){n.meta.traceMap=new Map}if(!n.meta.traceMap.get(t)){var i={trace:r,print:function(e){e=e||console.error;e("hypertrace /// ");var t=0;for(var n=0;n",i.meta.feature.displayName.padEnd(t+2),"-",i.meta.owner)}}};n.meta.traceMap.set(t,i)}}escapeSelector(e){return e.replace(/:/g,(function(e){return"\\"+e}))}nullCheck(e,t){if(e==null){throw new Error("'"+t.sourceFor()+"' is null")}}isEmpty(e){return e==undefined||e.length===0}doesExist(e){if(e==null){return false}if(this.shouldAutoIterate(e)){for(const t of e){return true}return false}return true}getRootNode(e){if(e&&e instanceof Node){var t=e.getRootNode();if(t instanceof Document||t instanceof ShadowRoot)return t}return document}getEventQueueFor(e,t){let r=this.getInternalData(e);var n=r.eventQueues;if(n==null){n=new Map;r.eventQueues=n}var i=n.get(t);if(i==null){i={queue:[],executing:false};n.set(t,i)}return i}beepValueToConsole(e,t,r){if(this.triggerEvent(e,"hyperscript:beep",{element:e,expression:t,value:r})){var n;if(r){if(r instanceof m){n="ElementCollection"}else if(r.constructor){n=r.constructor.name}else{n="unknown"}}else{n="object (null)"}var a=r;if(n==="String"){a='"'+a+'"'}else if(r instanceof m){a=Array.from(r)}console.log("///_ BEEP! The expression ("+i.sourceFor.call(t).replace("beep! ","")+") evaluates to:",a,"of type "+n)}}hyperscriptUrl="document"in e&&document.currentScript?document.currentScript.src:null}function s(){let e=document.cookie.split("; ").map((e=>{let t=e.split("=");return{name:t[0],value:decodeURIComponent(t[1])}}));return e}function u(e){document.cookie=e+"=;expires=Thu, 01 Jan 1970 00:00:00 GMT"}function l(){for(const e of s()){u(e.name)}}const c=new Proxy({},{get(e,t){if(t==="then"||t==="asyncWrapper"){return null}else if(t==="length"){return s().length}else if(t==="clear"){return u}else if(t==="clearAll"){return l}else if(typeof t==="string"){if(!isNaN(t)){return s()[parseInt(t)]}else{let e=document.cookie.split("; ").find((e=>e.startsWith(t+"=")))?.split("=")[1];if(e){return decodeURIComponent(e)}}}else if(t===Symbol.iterator){return s()[t]}},set(e,t,r){var n=null;if("string"===typeof r){n=encodeURIComponent(r);n+=";samesite=lax"}else{n=encodeURIComponent(r.value);if(r.expires){n+=";expires="+r.maxAge}if(r.maxAge){n+=";max-age="+r.maxAge}if(r.partitioned){n+=";partitioned="+r.partitioned}if(r.path){n+=";path="+r.path}if(r.samesite){n+=";samesite="+r.path}if(r.secure){n+=";secure="+r.path}}document.cookie=t+"="+n;return true}});class f{constructor(t,r,n,i,a){this.meta={parser:a.parser,lexer:a.lexer,runtime:a,owner:t,feature:r,iterators:{},ctx:this};this.locals={cookies:c};this.me=n,this.you=undefined;this.result=undefined;this.event=i;this.target=i?i.target:null;this.detail=i?i.detail:null;this.sender=i?i.detail?i.detail.sender:null:null;this.body="document"in e?document.body:null;a.addFeatures(t,this)}}class m{constructor(e,t,r){this._css=e;this.relativeToElement=t;this.escape=r;this[p]=true}get css(){if(this.escape){return o.prototype.escapeSelector(this._css)}else{return this._css}}get className(){return this._css.substr(1)}get id(){return this.className()}contains(e){for(let t of this){if(t.contains(e)){return true}}return false}get length(){return this.selectMatches().length}[Symbol.iterator](){let e=this.selectMatches();return e[Symbol.iterator]()}selectMatches(){let e=o.prototype.getRootNode(this.relativeToElement).querySelectorAll(this.css);return e}}const p=Symbol();function h(e,t){var r=e[t];if(r){return r}else{var n={};e[t]=n;return n}}function v(e){try{return JSON.parse(e)}catch(e){d(e);return null}}function d(e){if(console.error){console.error(e)}else if(console.log){console.log("ERROR: ",e)}}function E(e,t){return new(e.bind.apply(e,[e].concat(t)))}function T(t){t.addLeafExpression("parenthesized",(function(e,t,r){if(r.matchOpToken("(")){var n=r.clearFollows();try{var i=e.requireElement("expression",r)}finally{r.restoreFollows(n)}r.requireOpToken(")");return i}}));t.addLeafExpression("string",(function(e,t,r){var i=r.matchTokenType("STRING");if(!i)return;var a=i.value;var o;if(i.template){var s=n.tokenize(a,true);o=e.parseStringTemplate(s)}else{o=[]}return{type:"string",token:i,args:o,op:function(e){var t="";for(var r=1;re instanceof Element))}get css(){let e="",t=0;for(const r of this.templateParts){if(r instanceof Element){e+="[data-hs-query-id='"+t+++"']"}else e+=r}return e}[Symbol.iterator](){this.elements.forEach(((e,t)=>e.dataset.hsQueryId=t));const e=super[Symbol.iterator]();this.elements.forEach((e=>e.removeAttribute("data-hs-query-id")));return e}}t.addLeafExpression("queryRef",(function(e,t,i){var a=i.matchOpToken("<");if(!a)return;var o=i.consumeUntil("/");i.requireOpToken("/");i.requireOpToken(">");var s=o.map((function(e){if(e.type==="STRING"){return'"'+e.value+'"'}else{return e.value}})).join("");var u,l,c;if(s.indexOf("$")>=0){u=true;l=n.tokenize(s,true);c=e.parseStringTemplate(l)}return{type:"queryRef",css:s,args:c,op:function(e,...t){if(u){return new r(s,e.me,t)}else{return new m(s,e.me)}},evaluate:function(e){return t.unifiedEval(this,e)}}}));t.addLeafExpression("attributeRef",(function(e,t,r){var n=r.matchTokenType("ATTRIBUTE_REF");if(!n)return;if(!n.value)return;var i=n.value;if(i.indexOf("[")===0){var a=i.substring(2,i.length-1)}else{var a=i.substring(1)}var o="["+a+"]";var s=a.split("=");var u=s[0];var l=s[1];if(l){if(l.indexOf('"')===0){l=l.substring(1,l.length-1)}}return{type:"attributeRef",name:u,css:o,value:l,op:function(e){var t=e.you||e.me;if(t){return t.getAttribute(u)}},evaluate:function(e){return t.unifiedEval(this,e)}}}));t.addLeafExpression("styleRef",(function(e,t,r){var n=r.matchTokenType("STYLE_REF");if(!n)return;if(!n.value)return;var i=n.value.substr(1);if(i.startsWith("computed-")){i=i.substr("computed-".length);return{type:"computedStyleRef",name:i,op:function(e){var r=e.you||e.me;if(r){return t.resolveComputedStyle(r,i)}},evaluate:function(e){return t.unifiedEval(this,e)}}}else{return{type:"styleRef",name:i,op:function(e){var r=e.you||e.me;if(r){return t.resolveStyle(r,i)}},evaluate:function(e){return t.unifiedEval(this,e)}}}}));t.addGrammarElement("objectKey",(function(e,t,r){var n;if(n=r.matchTokenType("STRING")){return{type:"objectKey",key:n.value,evaluate:function(){return n.value}}}else if(r.matchOpToken("[")){var i=e.parseElement("expression",r);r.requireOpToken("]");return{type:"objectKey",expr:i,args:[i],op:function(e,t){return t},evaluate:function(e){return t.unifiedEval(this,e)}}}else{var a="";do{n=r.matchTokenType("IDENTIFIER")||r.matchOpToken("-");if(n)a+=n.value}while(n);return{type:"objectKey",key:a,evaluate:function(){return a}}}}));t.addLeafExpression("objectLiteral",(function(e,t,r){if(!r.matchOpToken("{"))return;var n=[];var i=[];if(!r.matchOpToken("}")){do{var a=e.requireElement("objectKey",r);r.requireOpToken(":");var o=e.requireElement("expression",r);i.push(o);n.push(a)}while(r.matchOpToken(","));r.requireOpToken("}")}return{type:"objectLiteral",args:[n,i],op:function(e,t,r){var n={};for(var i=0;i");var a=e.requireElement("expression",r);return{type:"blockLiteral",args:n,expr:a,evaluate:function(e){var t=function(){for(var t=0;t=0;a--){var o=i[a];if(o.compareDocumentPosition(e)===Node.DOCUMENT_POSITION_FOLLOWING){return o}}if(n){return i[i.length-1]}};var l=function(e,t,r,n){var i=[];o.prototype.forEach(t,(function(t){if(t.matches(r)||t===e){i.push(t)}}));for(var a=0;a","<=",">=","==","===","!=","!==");var a=i?i.value:null;var o=true;var s=false;if(a==null){if(r.matchToken("is")||r.matchToken("am")){if(r.matchToken("not")){if(r.matchToken("in")){a="not in"}else if(r.matchToken("a")){a="not a";s=true}else if(r.matchToken("empty")){a="not empty";o=false}else{if(r.matchToken("really")){a="!=="}else{a="!="}if(r.matchToken("equal")){r.matchToken("to")}}}else if(r.matchToken("in")){a="in"}else if(r.matchToken("a")){a="a";s=true}else if(r.matchToken("empty")){a="empty";o=false}else if(r.matchToken("less")){r.requireToken("than");if(r.matchToken("or")){r.requireToken("equal");r.requireToken("to");a="<="}else{a="<"}}else if(r.matchToken("greater")){r.requireToken("than");if(r.matchToken("or")){r.requireToken("equal");r.requireToken("to");a=">="}else{a=">"}}else{if(r.matchToken("really")){a="==="}else{a="=="}if(r.matchToken("equal")){r.matchToken("to")}}}else if(r.matchToken("equals")){a="=="}else if(r.matchToken("really")){r.requireToken("equals");a="==="}else if(r.matchToken("exist")||r.matchToken("exists")){a="exist";o=false}else if(r.matchToken("matches")||r.matchToken("match")){a="match"}else if(r.matchToken("contains")||r.matchToken("contain")){a="contain"}else if(r.matchToken("includes")||r.matchToken("include")){a="include"}else if(r.matchToken("do")||r.matchToken("does")){r.requireToken("not");if(r.matchToken("matches")||r.matchToken("match")){a="not match"}else if(r.matchToken("contains")||r.matchToken("contain")){a="not contain"}else if(r.matchToken("exist")||r.matchToken("exist")){a="not exist";o=false}else if(r.matchToken("include")){a="not include"}else{e.raiseParseError(r,"Expected matches or contains")}}}if(a){var u,l,c;if(s){u=r.requireTokenType("IDENTIFIER");l=!r.matchOpToken("!")}else if(o){c=e.requireElement("mathExpression",r);if(a==="match"||a==="not match"){c=c.css?c.css:c}}var m=n;n={type:"comparisonOperator",operator:a,typeName:u,nullOk:l,lhs:n,rhs:c,args:[n,c],op:function(e,r,n){if(a==="=="){return r==n}else if(a==="!="){return r!=n}if(a==="==="){return r===n}else if(a==="!=="){return r!==n}if(a==="match"){return r!=null&&p(m,r,n)}if(a==="not match"){return r==null||!p(m,r,n)}if(a==="in"){return n!=null&&f(c,n,r)}if(a==="not in"){return n==null||!f(c,n,r)}if(a==="contain"){return r!=null&&f(m,r,n)}if(a==="not contain"){return r==null||!f(m,r,n)}if(a==="include"){return r!=null&&f(m,r,n)}if(a==="not include"){return r==null||!f(m,r,n)}if(a==="==="){return r===n}else if(a==="!=="){return r!==n}else if(a==="<"){return r"){return r>n}else if(a==="<="){return r<=n}else if(a===">="){return r>=n}else if(a==="empty"){return t.isEmpty(r)}else if(a==="not empty"){return!t.isEmpty(r)}else if(a==="exist"){return t.doesExist(r)}else if(a==="not exist"){return!t.doesExist(r)}else if(a==="a"){return t.typeCheck(r,u.value,l)}else if(a==="not a"){return!t.typeCheck(r,u.value,l)}else{throw"Unknown comparison : "+a}},evaluate:function(e){return t.unifiedEval(this,e)}}}return n}));t.addGrammarElement("comparisonExpression",(function(e,t,r){return e.parseAnyOf(["comparisonOperator","mathExpression"],r)}));t.addGrammarElement("logicalOperator",(function(e,t,r){var n=e.parseElement("comparisonExpression",r);var i,a=null;i=r.matchToken("and")||r.matchToken("or");while(i){a=a||i;if(a.value!==i.value){e.raiseParseError(r,"You must parenthesize logical operations with different operators")}var o=e.requireElement("comparisonExpression",r);const s=i.value;n={type:"logicalOperator",operator:s,lhs:n,rhs:o,args:[n,o],op:function(e,t,r){if(s==="and"){return t&&r}else{return t||r}},evaluate:function(e){return t.unifiedEval(this,e)}};i=r.matchToken("and")||r.matchToken("or")}return n}));t.addGrammarElement("logicalExpression",(function(e,t,r){return e.parseAnyOf(["logicalOperator","mathExpression"],r)}));t.addGrammarElement("asyncExpression",(function(e,t,r){if(r.matchToken("async")){var n=e.requireElement("logicalExpression",r);var i={type:"asyncExpression",value:n,evaluate:function(e){return{asyncWrapper:true,value:this.value.evaluate(e)}}};return i}else{return e.parseElement("logicalExpression",r)}}));t.addGrammarElement("expression",(function(e,t,r){r.matchToken("the");return e.parseElement("asyncExpression",r)}));t.addGrammarElement("assignableExpression",(function(e,t,r){r.matchToken("the");var n=e.parseElement("primaryExpression",r);if(n&&(n.type==="symbol"||n.type==="ofExpression"||n.type==="propertyAccess"||n.type==="attributeRefAccess"||n.type==="attributeRef"||n.type==="styleRef"||n.type==="arrayIndex"||n.type==="possessive")){return n}else{e.raiseParseError(r,"A target expression must be writable. The expression type '"+(n&&n.type)+"' is not.")}return n}));t.addGrammarElement("hyperscript",(function(e,t,r){var n=[];if(r.hasMore()){while(e.featureStart(r.currentToken())||r.currentToken().value==="("){var i=e.requireElement("feature",r);n.push(i);r.matchToken("end")}}return{type:"hyperscript",features:n,apply:function(e,t,r){for(const i of n){i.install(e,t,r)}}}}));var v=function(e){var t=[];if(e.token(0).value==="("&&(e.token(1).value===")"||e.token(2).value===","||e.token(2).value===")")){e.matchOpToken("(");do{t.push(e.requireTokenType("IDENTIFIER"))}while(e.matchOpToken(","));e.requireOpToken(")")}return t};t.addFeature("on",(function(e,t,r){if(!r.matchToken("on"))return;var n=false;if(r.matchToken("every")){n=true}var i=[];var a=null;do{var o=e.requireElement("eventName",r,"Expected event name");var s=o.evaluate();if(a){a=a+" or "+s}else{a="on "+s}var u=v(r);var l=null;if(r.matchOpToken("[")){l=e.requireElement("expression",r);r.requireOpToken("]")}var c,f,m;if(r.currentToken().type==="NUMBER"){var p=r.consumeToken();if(!p.value)return;c=parseInt(p.value);if(r.matchToken("to")){var h=r.consumeToken();if(!h.value)return;f=parseInt(h.value)}else if(r.matchToken("and")){m=true;r.requireToken("on")}}var d,E;if(s==="intersection"){d={};if(r.matchToken("with")){d["with"]=e.requireElement("expression",r).evaluate()}if(r.matchToken("having")){do{if(r.matchToken("margin")){d["rootMargin"]=e.requireElement("stringLike",r).evaluate()}else if(r.matchToken("threshold")){d["threshold"]=e.requireElement("expression",r).evaluate()}else{e.raiseParseError(r,"Unknown intersection config specification")}}while(r.matchToken("and"))}}else if(s==="mutation"){E={};if(r.matchToken("of")){do{if(r.matchToken("anything")){E["attributes"]=true;E["subtree"]=true;E["characterData"]=true;E["childList"]=true}else if(r.matchToken("childList")){E["childList"]=true}else if(r.matchToken("attributes")){E["attributes"]=true;E["attributeOldValue"]=true}else if(r.matchToken("subtree")){E["subtree"]=true}else if(r.matchToken("characterData")){E["characterData"]=true;E["characterDataOldValue"]=true}else if(r.currentToken().type==="ATTRIBUTE_REF"){var T=r.consumeToken();if(E["attributeFilter"]==null){E["attributeFilter"]=[]}if(T.value.indexOf("@")==0){E["attributeFilter"].push(T.value.substring(1))}else{e.raiseParseError(r,"Only shorthand attribute references are allowed here")}}else{e.raiseParseError(r,"Unknown mutation config specification")}}while(r.matchToken("or"))}else{E["attributes"]=true;E["characterData"]=true;E["childList"]=true}}var y=null;var k=false;if(r.matchToken("from")){if(r.matchToken("elsewhere")){k=true}else{r.pushFollow("or");try{y=e.requireElement("expression",r)}finally{r.popFollow()}if(!y){e.raiseParseError(r,'Expected either target value or "elsewhere".')}}}if(y===null&&k===false&&r.matchToken("elsewhere")){k=true}if(r.matchToken("in")){var x=e.parseElement("unaryExpression",r)}if(r.matchToken("debounced")){r.requireToken("at");var g=e.requireElement("unaryExpression",r);var b=g.evaluate({})}else if(r.matchToken("throttled")){r.requireToken("at");var g=e.requireElement("unaryExpression",r);var w=g.evaluate({})}i.push({execCount:0,every:n,on:s,args:u,filter:l,from:y,inExpr:x,elsewhere:k,startCount:c,endCount:f,unbounded:m,debounceTime:b,throttleTime:w,mutationSpec:E,intersectionSpec:d,debounced:undefined,lastExec:undefined})}while(r.matchToken("or"));var S=true;if(!n){if(r.matchToken("queue")){if(r.matchToken("all")){var q=true;var S=false}else if(r.matchToken("first")){var N=true}else if(r.matchToken("none")){var I=true}else{r.requireToken("last")}}}var C=e.requireElement("commandList",r);e.ensureTerminated(C);var R,A;if(r.matchToken("catch")){R=r.requireTokenType("IDENTIFIER").value;A=e.requireElement("commandList",r);e.ensureTerminated(A)}if(r.matchToken("finally")){var L=e.requireElement("commandList",r);e.ensureTerminated(L)}var O={displayName:a,events:i,start:C,every:n,execCount:0,errorHandler:A,errorSymbol:R,execute:function(e){let r=t.getEventQueueFor(e.me,O);if(r.executing&&n===false){if(I||N&&r.queue.length>0){return}if(S){r.queue.length=0}r.queue.push(e);return}O.execCount++;r.executing=true;e.meta.onHalt=function(){r.executing=false;var e=r.queue.shift();if(e){setTimeout((function(){O.execute(e)}),1)}};e.meta.reject=function(r){console.error(r.message?r.message:r);var n=t.getHyperTrace(e,r);if(n){n.print()}t.triggerEvent(e.me,"exception",{error:r})};C.execute(e)},install:function(e,r){for(const r of O.events){var n;if(r.elsewhere){n=[document]}else if(r.from){n=r.from.evaluate(t.makeContext(e,O,e,null))}else{n=[e]}t.implicitLoop(n,(function(n){var i=r.on;if(n==null){console.warn("'%s' feature ignored because target does not exists:",a,e);return}if(r.mutationSpec){i="hyperscript:mutation";const e=new MutationObserver((function(e,r){if(!O.executing){t.triggerEvent(n,i,{mutationList:e,observer:r})}}));e.observe(n,r.mutationSpec)}if(r.intersectionSpec){i="hyperscript:intersection";const e=new IntersectionObserver((function(r){for(const o of r){var a={observer:e};a=Object.assign(a,o);a["intersecting"]=o.isIntersecting;t.triggerEvent(n,i,a)}}),r.intersectionSpec);e.observe(n)}var o=n.addEventListener||n.on;o.call(n,i,(function a(o){if(typeof Node!=="undefined"&&e instanceof Node&&n!==e&&!e.isConnected){n.removeEventListener(i,a);return}var s=t.makeContext(e,O,e,o);if(r.elsewhere&&e.contains(o.target)){return}if(r.from){s.result=n}for(const e of r.args){let t=s.event[e.value];if(t!==undefined){s.locals[e.value]=t}else if("detail"in s.event){s.locals[e.value]=s.event["detail"][e.value]}}s.meta.errorHandler=A;s.meta.errorSymbol=R;s.meta.finallyHandler=L;if(r.filter){var u=s.meta.context;s.meta.context=s.event;try{var l=r.filter.evaluate(s);if(l){}else{return}}finally{s.meta.context=u}}if(r.inExpr){var c=o.target;while(true){if(c.matches&&c.matches(r.inExpr.css)){s.result=c;break}else{c=c.parentElement;if(c==null){return}}}}r.execCount++;if(r.startCount){if(r.endCount){if(r.execCountr.endCount){return}}else if(r.unbounded){if(r.execCount{var a=false;for(const s of i){var o=n=>{e.result=n;if(s.args){for(const t of s.args){e.locals[t.value]=n[t.value]||(n.detail?n.detail[t.value]:null)}}if(!a){a=true;r(t.findNext(this,e))}};if(s.name){n.addEventListener(s.name,o,{once:true})}else if(s.time!=null){setTimeout(o,s.time,s.time)}}}))}};return n}else{var s;if(r.matchToken("a")){r.requireToken("tick");s=0}else{s=e.requireElement("expression",r)}n={type:"waitCmd",time:s,args:[s],op:function(e,r){return new Promise((n=>{setTimeout((()=>{n(t.findNext(this,e))}),r)}))},execute:function(e){return t.unifiedExec(this,e)}};return n}}));t.addGrammarElement("dotOrColonPath",(function(e,t,r){var n=r.matchTokenType("IDENTIFIER");if(n){var i=[n.value];var a=r.matchOpToken(".")||r.matchOpToken(":");if(a){do{i.push(r.requireTokenType("IDENTIFIER","NUMBER").value)}while(r.matchOpToken(a.value))}return{type:"dotOrColonPath",path:i,evaluate:function(){return i.join(a?a.value:"")}}}}));t.addGrammarElement("eventName",(function(e,t,r){var n;if(n=r.matchTokenType("STRING")){return{evaluate:function(){return n.value}}}return e.parseElement("dotOrColonPath",r)}));function d(e,t,r,n){var i=t.requireElement("eventName",n);var a=t.parseElement("namedArgumentList",n);if(e==="send"&&n.matchToken("to")||e==="trigger"&&n.matchToken("on")){var o=t.requireElement("expression",n)}else{var o=t.requireElement("implicitMeTarget",n)}var s={eventName:i,details:a,to:o,args:[o,i,a],op:function(e,t,n,i){r.nullCheck(t,o);r.implicitLoop(t,(function(t){r.triggerEvent(t,n,i,e.me)}));return r.findNext(s,e)}};return s}t.addCommand("trigger",(function(e,t,r){if(r.matchToken("trigger")){return d("trigger",e,t,r)}}));t.addCommand("send",(function(e,t,r){if(r.matchToken("send")){return d("send",e,t,r)}}));var T=function(e,t,r,n){if(n){if(e.commandBoundary(r.currentToken())){e.raiseParseError(r,"'return' commands must return a value. If you do not wish to return a value, use 'exit' instead.")}else{var i=e.requireElement("expression",r)}}var a={value:i,args:[i],op:function(e,r){var n=e.meta.resolve;e.meta.returned=true;e.meta.returnValue=r;if(n){if(r){n(r)}else{n()}}return t.HALT}};return a};t.addCommand("return",(function(e,t,r){if(r.matchToken("return")){return T(e,t,r,true)}}));t.addCommand("exit",(function(e,t,r){if(r.matchToken("exit")){return T(e,t,r,false)}}));t.addCommand("halt",(function(e,t,r){if(r.matchToken("halt")){if(r.matchToken("the")){r.requireToken("event");if(r.matchOpToken("'")){r.requireToken("s")}var n=true}if(r.matchToken("bubbling")){var i=true}else if(r.matchToken("default")){var a=true}var o=T(e,t,r,false);var s={keepExecuting:true,bubbling:i,haltDefault:a,exit:o,op:function(e){if(e.event){if(i){e.event.stopPropagation()}else if(a){e.event.preventDefault()}else{e.event.stopPropagation();e.event.preventDefault()}if(n){return t.findNext(this,e)}else{return o}}}};return s}}));t.addCommand("log",(function(e,t,r){if(!r.matchToken("log"))return;var n=[e.parseElement("expression",r)];while(r.matchOpToken(",")){n.push(e.requireElement("expression",r))}if(r.matchToken("with")){var i=e.requireElement("expression",r)}var a={exprs:n,withExpr:i,args:[i,n],op:function(e,r,n){if(r){r.apply(null,n)}else{console.log.apply(null,n)}return t.findNext(this,e)}};return a}));t.addCommand("beep!",(function(e,t,r){if(!r.matchToken("beep!"))return;var n=[e.parseElement("expression",r)];while(r.matchOpToken(",")){n.push(e.requireElement("expression",r))}var i={exprs:n,args:[n],op:function(e,r){for(let i=0;i{if(!r.matchToken("pick"))return;r.matchToken("the");if(r.matchToken("item")||r.matchToken("items")||r.matchToken("character")||r.matchToken("characters")){const n=g(e,t,r);r.requireToken("from");const i=e.requireElement("expression",r);return{args:[i,n.from,n.to],op(e,r,i,a){if(n.toEnd)a=r.length;if(!n.includeStart)i++;if(n.includeEnd)a++;if(a==null||a==undefined)a=i+1;e.result=r.slice(i,a);return t.findNext(this,e)}}}if(r.matchToken("match")){r.matchToken("of");const n=e.parseElement("expression",r);let i="";if(r.matchOpToken("|")){i=r.requireToken("identifier").value}r.requireToken("from");const a=e.parseElement("expression",r);return{args:[a,n],op(e,r,n){e.result=new RegExp(n,i).exec(r);return t.findNext(this,e)}}}if(r.matchToken("matches")){r.matchToken("of");const n=e.parseElement("expression",r);let i="gu";if(r.matchOpToken("|")){i="g"+r.requireToken("identifier").value.replace("g","")}console.log("flags",i);r.requireToken("from");const a=e.parseElement("expression",r);return{args:[a,n],op(e,r,n){e.result=new w(n,i,r);return t.findNext(this,e)}}}}));t.addCommand("increment",(function(e,t,r){if(!r.matchToken("increment"))return;var n;var i=e.parseElement("assignableExpression",r);if(r.matchToken("by")){n=e.requireElement("expression",r)}var a={type:"implicitIncrementOp",target:i,args:[i,n],op:function(e,t,r){t=t?parseFloat(t):0;r=n?parseFloat(r):1;var i=t+r;e.result=i;return i},evaluate:function(e){return t.unifiedEval(this,e)}};return k(e,t,r,i,a)}));t.addCommand("decrement",(function(e,t,r){if(!r.matchToken("decrement"))return;var n;var i=e.parseElement("assignableExpression",r);if(r.matchToken("by")){n=e.requireElement("expression",r)}var a={type:"implicitDecrementOp",target:i,args:[i,n],op:function(e,t,r){t=t?parseFloat(t):0;r=n?parseFloat(r):1;var i=t-r;e.result=i;return i},evaluate:function(e){return t.unifiedEval(this,e)}};return k(e,t,r,i,a)}));function S(e,t){var r="text";var n;e.matchToken("a")||e.matchToken("an");if(e.matchToken("json")||e.matchToken("Object")){r="json"}else if(e.matchToken("response")){r="response"}else if(e.matchToken("html")){r="html"}else if(e.matchToken("text")){}else{n=t.requireElement("dotOrColonPath",e).evaluate()}return{type:r,conversion:n}}t.addCommand("fetch",(function(e,t,r){if(!r.matchToken("fetch"))return;var n=e.requireElement("stringLike",r);if(r.matchToken("as")){var i=S(r,e)}if(r.matchToken("with")&&r.currentToken().value!=="{"){var a=e.parseElement("nakedNamedArgumentList",r)}else{var a=e.parseElement("objectLiteral",r)}if(i==null&&r.matchToken("as")){i=S(r,e)}var o=i?i.type:"text";var s=i?i.conversion:null;var u={url:n,argExpressions:a,args:[n,a],op:function(e,r,n){var i=n||{};i["sender"]=e.me;i["headers"]=i["headers"]||{};var a=new AbortController;let l=e.me.addEventListener("fetch:abort",(function(){a.abort()}),{once:true});i["signal"]=a.signal;t.triggerEvent(e.me,"hyperscript:beforeFetch",i);t.triggerEvent(e.me,"fetch:beforeRequest",i);n=i;var c=false;if(n.timeout){setTimeout((function(){if(!c){a.abort()}}),n.timeout)}return fetch(r,n).then((function(r){let n={response:r};t.triggerEvent(e.me,"fetch:afterResponse",n);r=n.response;if(o==="response"){e.result=r;t.triggerEvent(e.me,"fetch:afterRequest",{result:r});c=true;return t.findNext(u,e)}if(o==="json"){return r.json().then((function(r){e.result=r;t.triggerEvent(e.me,"fetch:afterRequest",{result:r});c=true;return t.findNext(u,e)}))}return r.text().then((function(r){if(s)r=t.convertValue(r,s);if(o==="html")r=t.convertValue(r,"Fragment");e.result=r;t.triggerEvent(e.me,"fetch:afterRequest",{result:r});c=true;return t.findNext(u,e)}))})).catch((function(r){t.triggerEvent(e.me,"fetch:error",{reason:r});throw r})).finally((function(){e.me.removeEventListener("fetch:abort",l)}))}};return u}))}function y(e){e.addCommand("settle",(function(e,t,r){if(r.matchToken("settle")){if(!e.commandBoundary(r.currentToken())){var n=e.requireElement("expression",r)}else{var n=e.requireElement("implicitMeTarget",r)}var i={type:"settleCmd",args:[n],op:function(e,r){t.nullCheck(r,n);var a=null;var o=false;var s=false;var u=new Promise((function(e){a=e}));r.addEventListener("transitionstart",(function(){s=true}),{once:true});setTimeout((function(){if(!s&&!o){a(t.findNext(i,e))}}),500);r.addEventListener("transitionend",(function(){if(!o){a(t.findNext(i,e))}}),{once:true});return u},execute:function(e){return t.unifiedExec(this,e)}};return i}}));e.addCommand("add",(function(e,t,r){if(r.matchToken("add")){var n=e.parseElement("classRef",r);var i=null;var a=null;if(n==null){i=e.parseElement("attributeRef",r);if(i==null){a=e.parseElement("styleLiteral",r);if(a==null){e.raiseParseError(r,"Expected either a class reference or attribute expression")}}}else{var o=[n];while(n=e.parseElement("classRef",r)){o.push(n)}}if(r.matchToken("to")){var s=e.requireElement("expression",r)}else{var s=e.requireElement("implicitMeTarget",r)}if(r.matchToken("when")){if(a){e.raiseParseError(r,"Only class and properties are supported with a when clause")}var u=e.requireElement("expression",r)}if(o){return{classRefs:o,to:s,args:[s,o],op:function(e,r,n){t.nullCheck(r,s);t.forEach(n,(function(n){t.implicitLoop(r,(function(r){if(u){e.result=r;let i=t.evaluateNoPromise(u,e);if(i){if(r instanceof Element)r.classList.add(n.className)}else{if(r instanceof Element)r.classList.remove(n.className)}e.result=null}else{if(r instanceof Element)r.classList.add(n.className)}}))}));return t.findNext(this,e)}}}else if(i){return{type:"addCmd",attributeRef:i,to:s,args:[s],op:function(e,r,n){t.nullCheck(r,s);t.implicitLoop(r,(function(r){if(u){e.result=r;let n=t.evaluateNoPromise(u,e);if(n){r.setAttribute(i.name,i.value)}else{r.removeAttribute(i.name)}e.result=null}else{r.setAttribute(i.name,i.value)}}));return t.findNext(this,e)},execute:function(e){return t.unifiedExec(this,e)}}}else{return{type:"addCmd",cssDeclaration:a,to:s,args:[s,a],op:function(e,r,n){t.nullCheck(r,s);t.implicitLoop(r,(function(e){e.style.cssText+=n}));return t.findNext(this,e)},execute:function(e){return t.unifiedExec(this,e)}}}}}));e.addGrammarElement("styleLiteral",(function(e,t,r){if(!r.matchOpToken("{"))return;var n=[""];var i=[];while(r.hasMore()){if(r.matchOpToken("\\")){r.consumeToken()}else if(r.matchOpToken("}")){break}else if(r.matchToken("$")){var a=r.matchOpToken("{");var o=e.parseElement("expression",r);if(a)r.requireOpToken("}");i.push(o);n.push("")}else{var s=r.consumeToken();n[n.length-1]+=r.source.substring(s.start,s.end)}n[n.length-1]+=r.lastWhitespace()}return{type:"styleLiteral",args:[i],op:function(e,t){var r="";n.forEach((function(e,n){r+=e;if(n in t)r+=t[n]}));return r},evaluate:function(e){return t.unifiedEval(this,e)}}}));e.addCommand("remove",(function(e,t,r){if(r.matchToken("remove")){var n=e.parseElement("classRef",r);var i=null;var a=null;if(n==null){i=e.parseElement("attributeRef",r);if(i==null){a=e.parseElement("expression",r);if(a==null){e.raiseParseError(r,"Expected either a class reference, attribute expression or value expression")}}}else{var o=[n];while(n=e.parseElement("classRef",r)){o.push(n)}}if(r.matchToken("from")){var s=e.requireElement("expression",r)}else{if(a==null){var s=e.requireElement("implicitMeTarget",r)}}if(a){return{elementExpr:a,from:s,args:[a,s],op:function(e,r,n){t.nullCheck(r,a);t.implicitLoop(r,(function(e){if(e.parentElement&&(n==null||n.contains(e))){e.parentElement.removeChild(e)}}));return t.findNext(this,e)}}}else{return{classRefs:o,attributeRef:i,elementExpr:a,from:s,args:[o,s],op:function(e,r,n){t.nullCheck(n,s);if(r){t.forEach(r,(function(e){t.implicitLoop(n,(function(t){t.classList.remove(e.className)}))}))}else{t.implicitLoop(n,(function(e){e.removeAttribute(i.name)}))}return t.findNext(this,e)}}}}}));e.addCommand("toggle",(function(e,t,r){if(r.matchToken("toggle")){r.matchAnyToken("the","my");if(r.currentToken().type==="STYLE_REF"){let t=r.consumeToken();var n=t.value.substr(1);var a=true;var o=i(e,r,n);if(r.matchToken("of")){r.pushFollow("with");try{var s=e.requireElement("expression",r)}finally{r.popFollow()}}else{var s=e.requireElement("implicitMeTarget",r)}}else if(r.matchToken("between")){var u=true;var l=e.parseElement("classRef",r);r.requireToken("and");var c=e.requireElement("classRef",r)}else{var l=e.parseElement("classRef",r);var f=null;if(l==null){f=e.parseElement("attributeRef",r);if(f==null){e.raiseParseError(r,"Expected either a class reference or attribute expression")}}else{var m=[l];while(l=e.parseElement("classRef",r)){m.push(l)}}}if(a!==true){if(r.matchToken("on")){var s=e.requireElement("expression",r)}else{var s=e.requireElement("implicitMeTarget",r)}}if(r.matchToken("for")){var p=e.requireElement("expression",r)}else if(r.matchToken("until")){var h=e.requireElement("dotOrColonPath",r,"Expected event name");if(r.matchToken("from")){var v=e.requireElement("expression",r)}}var d={classRef:l,classRef2:c,classRefs:m,attributeRef:f,on:s,time:p,evt:h,from:v,toggle:function(e,r,n,i){t.nullCheck(e,s);if(a){t.implicitLoop(e,(function(e){o("toggle",e)}))}else if(u){t.implicitLoop(e,(function(e){if(e.classList.contains(r.className)){e.classList.remove(r.className);e.classList.add(n.className)}else{e.classList.add(r.className);e.classList.remove(n.className)}}))}else if(i){t.forEach(i,(function(r){t.implicitLoop(e,(function(e){e.classList.toggle(r.className)}))}))}else{t.forEach(e,(function(e){if(e.hasAttribute(f.name)){e.removeAttribute(f.name)}else{e.setAttribute(f.name,f.value)}}))}},args:[s,p,h,v,l,c,m],op:function(e,r,n,i,a,o,s,u){if(n){return new Promise((function(i){d.toggle(r,o,s,u);setTimeout((function(){d.toggle(r,o,s,u);i(t.findNext(d,e))}),n)}))}else if(i){return new Promise((function(n){var l=a||e.me;l.addEventListener(i,(function(){d.toggle(r,o,s,u);n(t.findNext(d,e))}),{once:true});d.toggle(r,o,s,u)}))}else{this.toggle(r,o,s,u);return t.findNext(d,e)}}};return d}}));var t={display:function(r,n,i){if(i){n.style.display=i}else if(r==="toggle"){if(getComputedStyle(n).display==="none"){t.display("show",n,i)}else{t.display("hide",n,i)}}else if(r==="hide"){const t=e.runtime.getInternalData(n);if(t.originalDisplay==null){t.originalDisplay=n.style.display}n.style.display="none"}else{const t=e.runtime.getInternalData(n);if(t.originalDisplay&&t.originalDisplay!=="none"){n.style.display=t.originalDisplay}else{n.style.removeProperty("display")}}},visibility:function(e,r,n){if(n){r.style.visibility=n}else if(e==="toggle"){if(getComputedStyle(r).visibility==="hidden"){t.visibility("show",r,n)}else{t.visibility("hide",r,n)}}else if(e==="hide"){r.style.visibility="hidden"}else{r.style.visibility="visible"}},opacity:function(e,r,n){if(n){r.style.opacity=n}else if(e==="toggle"){if(getComputedStyle(r).opacity==="0"){t.opacity("show",r,n)}else{t.opacity("hide",r,n)}}else if(e==="hide"){r.style.opacity="0"}else{r.style.opacity="1"}}};var n=function(e,t,r){var n;var i=r.currentToken();if(i.value==="when"||i.value==="with"||e.commandBoundary(i)){n=e.parseElement("implicitMeTarget",r)}else{n=e.parseElement("expression",r)}return n};var i=function(e,n,i){var a=r.defaultHideShowStrategy;var o=t;if(r.hideShowStrategies){o=Object.assign(o,r.hideShowStrategies)}i=i||a||"display";var s=o[i];if(s==null){e.raiseParseError(n,"Unknown show/hide strategy : "+i)}return s};e.addCommand("hide",(function(e,t,r){if(r.matchToken("hide")){var a=n(e,t,r);var o=null;if(r.matchToken("with")){o=r.requireTokenType("IDENTIFIER","STYLE_REF").value;if(o.indexOf("*")===0){o=o.substr(1)}}var s=i(e,r,o);return{target:a,args:[a],op:function(e,r){t.nullCheck(r,a);t.implicitLoop(r,(function(e){s("hide",e)}));return t.findNext(this,e)}}}}));e.addCommand("show",(function(e,t,r){if(r.matchToken("show")){var a=n(e,t,r);var o=null;if(r.matchToken("with")){o=r.requireTokenType("IDENTIFIER","STYLE_REF").value;if(o.indexOf("*")===0){o=o.substr(1)}}var s=null;if(r.matchOpToken(":")){var u=r.consumeUntilWhitespace();r.matchTokenType("WHITESPACE");s=u.map((function(e){return e.value})).join("")}if(r.matchToken("when")){var l=e.requireElement("expression",r)}var c=i(e,r,o);return{target:a,when:l,args:[a],op:function(e,r){t.nullCheck(r,a);t.implicitLoop(r,(function(r){if(l){e.result=r;let n=t.evaluateNoPromise(l,e);if(n){c("show",r,s)}else{c("hide",r)}e.result=null}else{c("show",r,s)}}));return t.findNext(this,e)}}}}));e.addCommand("take",(function(e,t,r){if(r.matchToken("take")){let u=null;let l=[];while(u=e.parseElement("classRef",r)){l.push(u)}var n=null;var i=null;let c=l.length>0;if(!c){n=e.parseElement("attributeRef",r);if(n==null){e.raiseParseError(r,"Expected either a class reference or attribute expression")}if(r.matchToken("with")){i=e.requireElement("expression",r)}}if(r.matchToken("from")){var a=e.requireElement("expression",r)}if(r.matchToken("for")){var o=e.requireElement("expression",r)}else{var o=e.requireElement("implicitMeTarget",r)}if(c){var s={classRefs:l,from:a,forElt:o,args:[l,a,o],op:function(e,r,n,i){t.nullCheck(i,o);t.implicitLoop(r,(function(e){var r=e.className;if(n){t.implicitLoop(n,(function(e){e.classList.remove(r)}))}else{t.implicitLoop(e,(function(e){e.classList.remove(r)}))}t.implicitLoop(i,(function(e){e.classList.add(r)}))}));return t.findNext(this,e)}};return s}else{var s={attributeRef:n,from:a,forElt:o,args:[a,o,i],op:function(e,r,i,s){t.nullCheck(r,a);t.nullCheck(i,o);t.implicitLoop(r,(function(e){if(!s){e.removeAttribute(n.name)}else{e.setAttribute(n.name,s)}}));t.implicitLoop(i,(function(e){e.setAttribute(n.name,n.value||"")}));return t.findNext(this,e)}};return s}}}));function a(t,r,n,i){if(n!=null){var a=t.resolveSymbol(n,r)}else{var a=r}if(a instanceof Element||a instanceof HTMLDocument){while(a.firstChild)a.removeChild(a.firstChild);a.append(e.runtime.convertValue(i,"Fragment"));t.processNode(a)}else{if(n!=null){t.setSymbol(n,r,null,i)}else{throw"Don't know how to put a value into "+typeof r}}}e.addCommand("put",(function(e,t,r){if(r.matchToken("put")){var n=e.requireElement("expression",r);var i=r.matchAnyToken("into","before","after");if(i==null&&r.matchToken("at")){r.matchToken("the");i=r.matchAnyToken("start","end");r.requireToken("of")}if(i==null){e.raiseParseError(r,"Expected one of 'into', 'before', 'at start of', 'at end of', 'after'")}var o=e.requireElement("expression",r);var s=i.value;var u=false;var l=false;var c=null;var f=null;if(o.type==="arrayIndex"&&s==="into"){u=true;f=o.prop;c=o.root}else if(o.prop&&o.root&&s==="into"){f=o.prop.value;c=o.root}else if(o.type==="symbol"&&s==="into"){l=true;f=o.name}else if(o.type==="attributeRef"&&s==="into"){var m=true;f=o.name;c=e.requireElement("implicitMeTarget",r)}else if(o.type==="styleRef"&&s==="into"){var p=true;f=o.name;c=e.requireElement("implicitMeTarget",r)}else if(o.attribute&&s==="into"){var m=o.attribute.type==="attributeRef";var p=o.attribute.type==="styleRef";f=o.attribute.name;c=o.root}else{c=o}var h={target:o,operation:s,symbolWrite:l,value:n,args:[c,f,n],op:function(e,r,n,i){if(l){a(t,e,n,i)}else{t.nullCheck(r,c);if(s==="into"){if(m){t.implicitLoop(r,(function(e){e.setAttribute(n,i)}))}else if(p){t.implicitLoop(r,(function(e){e.style[n]=i}))}else if(u){r[n]=i}else{t.implicitLoop(r,(function(e){a(t,e,n,i)}))}}else{var o=s==="before"?Element.prototype.before:s==="after"?Element.prototype.after:s==="start"?Element.prototype.prepend:s==="end"?Element.prototype.append:Element.prototype.append;t.implicitLoop(r,(function(e){o.call(e,i instanceof Node?i:t.convertValue(i,"Fragment"));if(e.parentElement){t.processNode(e.parentElement)}else{t.processNode(e)}}))}}return t.findNext(this,e)}};return h}}));function o(e,t,r){var n;if(r.matchToken("the")||r.matchToken("element")||r.matchToken("elements")||r.currentToken().type==="CLASS_REF"||r.currentToken().type==="ID_REF"||r.currentToken().op&&r.currentToken().value==="<"){e.possessivesDisabled=true;try{n=e.parseElement("expression",r)}finally{delete e.possessivesDisabled}if(r.matchOpToken("'")){r.requireToken("s")}}else if(r.currentToken().type==="IDENTIFIER"&&r.currentToken().value==="its"){var i=r.matchToken("its");n={type:"pseudopossessiveIts",token:i,name:i.value,evaluate:function(e){return t.resolveSymbol("it",e)}}}else{r.matchToken("my")||r.matchToken("me");n=e.parseElement("implicitMeTarget",r)}return n}e.addCommand("transition",(function(e,t,n){if(n.matchToken("transition")){var i=o(e,t,n);var a=[];var s=[];var u=[];var l=n.currentToken();while(!e.commandBoundary(l)&&l.value!=="over"&&l.value!=="using"){if(n.currentToken().type==="STYLE_REF"){let e=n.consumeToken();let t=e.value.substr(1);a.push({type:"styleRefValue",evaluate:function(){return t}})}else{a.push(e.requireElement("stringLike",n))}if(n.matchToken("from")){s.push(e.requireElement("expression",n))}else{s.push(null)}n.requireToken("to");if(n.matchToken("initial")){u.push({type:"initial_literal",evaluate:function(){return"initial"}})}else{u.push(e.requireElement("expression",n))}l=n.currentToken()}if(n.matchToken("over")){var c=e.requireElement("expression",n)}else if(n.matchToken("using")){var f=e.requireElement("expression",n)}var m={to:u,args:[i,a,s,u,f,c],op:function(e,n,a,o,s,u,l){t.nullCheck(n,i);var c=[];t.implicitLoop(n,(function(e){var n=new Promise((function(n,i){var c=e.style.transition;if(l){e.style.transition="all "+l+"ms ease-in"}else if(u){e.style.transition=u}else{e.style.transition=r.defaultTransition}var f=t.getInternalData(e);var m=getComputedStyle(e);var p={};for(var h=0;he.forEach((e=>S(e))))).then((()=>n((function(){a();k.processNode(document.documentElement);e.document.addEventListener("htmx:load",(function(e){k.processNode(e.detail.elt)}))}))));function n(e){if(document.readyState!=="loading"){setTimeout(e)}else{document.addEventListener("DOMContentLoaded",e)}}function i(){var e=document.querySelector('meta[name="htmx-config"]');if(e){return v(e.content)}else{return null}}function a(){var e=i();if(e){Object.assign(r,e)}}}const S=Object.assign(b,{config:r,use(e){e(S)},internals:{lexer:x,parser:g,runtime:k,Lexer:n,Tokens:i,Parser:a,Runtime:o},ElementCollection:m,addFeature:g.addFeature.bind(g),addCommand:g.addCommand.bind(g),addLeafExpression:g.addLeafExpression.bind(g),addIndirectExpression:g.addIndirectExpression.bind(g),evaluate:k.evaluate.bind(k),parse:k.parse.bind(k),processNode:k.processNode.bind(k),version:"0.9.12",browserInit:w});return S})); diff --git a/assets/static/js/main.js b/assets/static/js/main.js new file mode 100644 index 0000000..45b5a87 --- /dev/null +++ b/assets/static/js/main.js @@ -0,0 +1,256 @@ +if (typeof(registerServiceWorker) == undefined) { +const registerServiceWorker = async () => { + if ("serviceWorker" in navigator) { + try { + const registration = await navigator.serviceWorker.register("/static/js/serviceWorker.js", { + scope: "/", + }); + if (registration.installing) { + console.log("Service worker installing"); + } else if (registration.waiting) { + console.log("Service worker installed"); + } else if (registration.active) { + console.log("Service worker active"); + } + } catch (error) { + console.error("Registration failed with ${error}"); + } + } +}; +registerServiceWorker(); +} + +//Variable for gestures +if (typeof(_bm_xDown) == undefined) { + let _bm_xDown; +} + +if (typeof(_bm_yDown) == undefined) { + let _bm_yDown; +} + +function bm_toggle_dropdown(list_id) { + var list = document.getElementById(list_id); + if (list.className.indexOf("w3-show") == -1) { + list.className += " w3-show"; + } else { + list.className = list.className.replace(" w3-show", ""); + } +} + +function bm_overlay_off(sidebar_id) { + document.getElementById("overlay").style.display = "none"; + bm_hide_sidebar(sidebar_id); +} + +function bm_toggle_sidebar(sidebar_id) { + sidebar = document.getElementById(sidebar_id); + if (sidebar.style.display === "block") { + document.getElementById("overlay").style.display = "none"; + sidebar.style.display = "none"; + sidebar.classList.remove("mobile-sidebar"); + } else { + document.getElementById("overlay").style.display = "block"; + sidebar.style.display = "block"; + sidebar.classList.add("mobile-sidebar"); + } +} + +function bm_hide_sidebar(sidebar_id) { + document.getElementById("overlay").style.display = "none"; + sidebar = document.getElementById(sidebar_id); + sidebar.style.display = "none"; + sidebar.classList.remove("mobile-sidebar") +} + +function bm_sidebar_click(sidebar_id) { + sidebar = document.getElementById(sidebar_id); + if(sidebar.classList.contains("mobile-sidebar")) { + bm_hide_sidebar(sidebar_id); + bm_hide_quickbox(); + } +} + +function bm_toggle_visibility(element_id) { + element = document.getElementById(element_id); + if (element.classList.contains("hidden")) { + element.classList.remove("hidden"); + } else { + element.classList.add("hidden"); + } + + var x = document.getElementsByClassName(element_id); + for (var i = 0; i < x.length; i++) { + if (x[i].classList.contains("hidden")) { + x[i].classList.remove("hidden"); + } else { + x[i].classList.add("hidden"); + } + } +} + +function bm_toggle_visibility_list_search(element_id) { + element = document.getElementById(element_id); + if (element.classList.contains("hidden")) { + element.classList.remove("hidden"); + } else { + element.classList.add("hidden"); + } + + var x = document.getElementsByClassName("stickyheader"); + for (var i = 0; i < x.length; i++) { + if (x[i].classList.contains("searchopened")) { + x[i].classList.remove("searchopened"); + } else { + x[i].classList.add("searchopened"); + } + } +} + +function bm_open_tab(element, tab_button_class, tab_class, tab_id) { + var x = document.getElementsByClassName("tab-button"); + for (var i = 0; i < x.length; i++) { + x[i].classList.remove("active"); + } + element.classList.add("active"); + var x = document.getElementsByClassName("tab"); + for (var i = 0; i < x.length; i++) { + x[i].style.display = "none"; + } + document.getElementById(tab_id).style.display = "block"; +} + +function bm_show_quickbox() { + htmx.ajax('GET', '/quickbox/all', {target:'#quickbox-notes', swap:'innerHTML'}) + document.getElementById("quickbox").style.display = "block"; +} + +function bm_hide_quickbox() { + document.getElementById("quickbox").style.display = "none"; +} + +function bm_toggle_quickbox() { + quickbox = document.getElementById("quickbox"); + console.log(quickbox); + if(quickbox.style.display == "block") { + bm_hide_quickbox(); + } + else { + bm_show_quickbox(); + } +} + +function bm_show_confirm(sender, title, message) { + document.querySelector("#modal-confirm-dialog h5").innerHTML = title; + document.querySelector("#modal-confirm-dialog p").innerHTML = message; + + btn_ok = document.getElementById("modal-confirm-ok"); + btn_ok.outerHTML = btn_ok.outerHTML; + + document.getElementById("modal-confirm-ok").addEventListener('click', (event) => { + htmx.trigger(sender, 'confirmed'); + document.getElementById("modal-confirm-dialog").style.display = "none"; + }); + + document.getElementById("modal-confirm-dialog").style.display = "block"; +} + +function bm_item_field_add(type_field_id, widget) { + template = Handlebars.templates['items/field-' + widget] + fields_list = document.getElementById('fields-' + type_field_id); + counter = parseInt(document.getElementById('fields-' + type_field_id + '-counter').innerHTML); + fields_list.insertAdjacentHTML('beforeend', template({type_field_id:type_field_id,counter:counter, value:""})); + document.getElementById('fields-' + type_field_id + '-counter').innerHTML = counter + 1; +} + +document.addEventListener("DOMContentLoaded", function(event){ + // const easyMDE = new EasyMDE({autosave: {enabled: true, uniqueId: 'eMDE-item-descriotion'}, element: document.getElementById('item-description')}); + /* + //Swipe on body, disabled due to conflicts + document.querySelector('body') + .addEventListener( + 'touchstart', + bm_handleTouchStart, + false + ); + document.querySelector('body') + .addEventListener( + 'touchmove', + bm_handleTouchMove, + false + ); + */ + + document.body.addEventListener("quickboxNoteClear", function(evt){ + document.getElementById("quickbox-note").value = '' + }); + + document.body.addEventListener("closeQuickboxTransformModal", function(evt){ + document.getElementById("modal").remove(); + if(evt.detail.keepQuickNote == 0){ + htmx.ajax('DELETE', '/quickbox/delete/' + evt.detail.quickNoteId, {target:'#quicknote-' + evt.detail.quickNoteId, swap:'outerHTML swap:1s'}) + } + }); + + document.body.addEventListener("activateEasyMDE", function(evt){ + const easyMDE = new EasyMDE({element: document.getElementById(evt.detail.value), forceSync: true}); +}); +}); + +function bm_ignoreSwipe(event) { + // if some touches come from elements with ignoreswipe class > ignore + return Array.from(event.touches).some((t) => + t.target.classList.contains('noswipe') + ); +} + +function bm_handleTouchStart(event) { + if (bm_ignoreSwipe(event)) { + _bm_xDown = undefined; + _bm_yDown = undefined; + return; + } + + const firstTouch = event.touches[0]; + _bm_xDown = firstTouch.clientX; + _bm_yDown = firstTouch.clientY; +} + +function bm_handleTouchMove(event) { + + if (!_bm_xDown || !_bm_yDown) { + return; + } + + const xUp = event.touches[0].clientX; + const yUp = event.touches[0].clientY; + + const xDiff = _bm_xDown - xUp; + const yDiff = _bm_yDown - yUp; + + if (Math.abs(xDiff) > Math.abs(yDiff)) { + /*most significant*/ + if (xDiff > 1) { + /* left swipe */ + //console.log('app: left swipe ', true); + bm_show_quickbox(); + } else { + /* right swipe */ + //console.log('app: right swipe ', true); + bm_toggle_sidebar("main-sidebar"); + } + } else { + if (yDiff > 1) { + /* up swipe */ + console.log('app: up swipe ', true); + } else { + /* down swipe */ + console.log('app: down swipe ', true); + } + } + + /* reset values */ + _bm_xDown = null; + _bm_yDown = null; +} + diff --git a/assets/static/js/serviceWorker.js b/assets/static/js/serviceWorker.js new file mode 100644 index 0000000..bf14e82 --- /dev/null +++ b/assets/static/js/serviceWorker.js @@ -0,0 +1,59 @@ +const cacheVersion = "0.266" +const cacheName = "speedtech-brainminder" +const cacheFiles = [ + '/static/bootstrap-icons/font/bootstrap-icons.min.css', + '/static/bootstrap-icons/font/fonts/bootstrap-icons.woff', + '/static/bootstrap-icons/font/fonts/bootstrap-icons.woff2', + '/static/bootstrap-icons/*.svg', + "/static/easymde/easymde.min.css", + '/static/css/main.css', + '/static/img/brainminder.svg', + '/static/img/brainminder-icon.svg', + "/static/easymde/easymde.min.js", + "/static/js/Sortable.min.js", + "/static/js/htmx/htmx.min.js", + "/static/js/hyperscript.min.js", + "/static/js/handlebars.js", + "/static/js/templates.js", + '/static/js/main.js', +] + +self.addEventListener('install', function(e) { + e.waitUntil( + // Open the cache + caches.open(cacheName).then(function(cache) { + // Add all the default files to the cache + console.log('[ServiceWorker] Caching cacheFiles'); + return cache.addAll(cacheFiles); + }) + ); +}); + +self.addEventListener('activate', function(e) { + e.waitUntil( + // Get all the cache keys (cacheName) + caches.keys().then(function(cacheNames) { + return Promise.all(cacheNames.map(function(thisCacheName) { + // If a cached item is saved under a previous cacheName + if (thisCacheName !== cacheName) { + // Delete that cached file + console.log('[ServiceWorker] Removing Cached Files from Cache - ', thisCacheName); + return caches.delete(thisCacheName); + } + })); + }) + ); +}); + +self.addEventListener('fetch', (event) => { + // Respond to the document with what is returned from + event.respondWith( + // 1. Check the cache if a file matching that request is available + caches.match(event.request).then((response) => { + // 2. If it is, respond to the document with the file from the cache + if (response) return response + // 3. If it isn’t, fetch the file from the network and respond to the document with the fetched file + return fetch(event.request) + }) + ); +}); \ No newline at end of file diff --git a/assets/static/js/templates.js b/assets/static/js/templates.js new file mode 100644 index 0000000..d19b365 --- /dev/null +++ b/assets/static/js/templates.js @@ -0,0 +1,67 @@ +(function() { + var template = Handlebars.template, templates = Handlebars.templates = Handlebars.templates || {}; +templates['items/field-text'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { + var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return parent[propertyName]; + } + return undefined + }; + + return "
    \n
    \n
    \n
    "; +},"useData":true}); +templates['items/field-url'] = template({"compiler":[8,">= 4.3.0"],"main":function(container,depth0,helpers,partials,data) { + var helper, alias1=depth0 != null ? depth0 : (container.nullContext || {}), alias2=container.hooks.helperMissing, alias3="function", alias4=container.escapeExpression, lookupProperty = container.lookupProperty || function(parent, propertyName) { + if (Object.prototype.hasOwnProperty.call(parent, propertyName)) { + return parent[propertyName]; + } + return undefined + }; + + return "
    \n
    \n
    \n
    "; +},"useData":true}); +})(); \ No newline at end of file diff --git a/assets/static/manifest.json b/assets/static/manifest.json new file mode 100644 index 0000000..5c1d715 --- /dev/null +++ b/assets/static/manifest.json @@ -0,0 +1,89 @@ +{ + "name": "BrainMinder", + "short_name": "BrainMinder", + "start_url": "/", + "scope": "/", + "display": "standalone", + "background_color": "#2b5797", + "theme_color": "#2b5797", + "orientation": "any", + "icons": [{ + "src": "/static/img/icons/72x72.png", + "type": "image/png", + "sizes": "72x72", + "purpose": "any" + }, + { + "src": "/static/img/icons/96x96.png", + "type": "image/png", + "sizes": "96x96", + "purpose": "any" + }, + { + "src": "/static/img/icons/128x128.png", + "type": "image/png", + "sizes": "128x128", + "purpose": "any" + }, + { + "src": "/static/img/icons/144x144.png", + "type": "image/png", + "sizes": "144x144", + "purpose": "any" + }, + { + "src": "/static/img/icons/152x152.png", + "type": "image/png", + "sizes": "152x152", + "purpose": "any" + }, + { + "src": "/static/img/icons/192x192.png", + "type": "image/png", + "sizes": "192x192", + "purpose": "any" + }, + { + "src": "/static/img/icons/384x384.png", + "type": "image/png", + "sizes": "384x384", + "purpose": "any" + }, + { + "src": "/static/img/icons/512x512.png", + "type": "image/png", + "sizes": "512x512", + "purpose": "any" + } + ], + "screenshots" : [ + { + "src": "/static/img/screenshots/BrainMinder-screenshot-wide.webp", + "sizes": "1920x1080", + "type": "image/webp", + "form_factor": "wide", + "label": "List of items of BrainMinder" + }, + { + "src": "/static/img/screenshots/BrainMinder-screenshot-wide-1.webp", + "sizes": "1920x1080", + "type": "image/webp", + "form_factor": "wide", + "label": "Dashboard of BrainMinder" + }, + { + "src": "/static/img/screenshots/BrainMinder-screenshot-narrow.webp", + "sizes": "800x1726", + "type": "image/webp", + "form_factor": "narrow", + "label": "List of items of BrainMinder on mobile" + }, + { + "src": "/static/img/screenshots/BrainMinder-screenshot-narrow-1.webp", + "sizes": "800x1726", + "type": "image/webp", + "form_factor": "narrow", + "label": "Menu opened in BrainMinder on mobile" + } + ] +} \ No newline at end of file diff --git a/assets/templates/base.tmpl b/assets/templates/base.tmpl new file mode 100644 index 0000000..fa9b50f --- /dev/null +++ b/assets/templates/base.tmpl @@ -0,0 +1,132 @@ +{{define "base"}} + + + + + + + + BrainMinder + + + + + + + + {{block "page:meta" . }} + {{ + end + }} + + + + {{template "partial:sidebar" .}} + +
    + + {{template "partial:footer" .}} +
    + +
    + + + +
    +
    +
    + +
    +
    Quickbox
    +
    + +
    +
    +
    +
    + +
    +
    +
    + + + +
    + + + +{{ end }} diff --git a/assets/templates/categories/create_title.tmpl b/assets/templates/categories/create_title.tmpl new file mode 100644 index 0000000..ddaa641 --- /dev/null +++ b/assets/templates/categories/create_title.tmpl @@ -0,0 +1,8 @@ +{{define "page:title"}} +
    +
    New Category
    +
    +
    + +
    +{{end}} diff --git a/assets/templates/categories/form.tmpl b/assets/templates/categories/form.tmpl new file mode 100644 index 0000000..366a735 --- /dev/null +++ b/assets/templates/categories/form.tmpl @@ -0,0 +1,52 @@ +{{ define "page:content" }} +
    +
    +

    + + +

    + +

    + + Back +

    +
    +
    +
    +
    + +
    +
    + + +
    +
    +
    +
    +{{ end }} diff --git a/assets/templates/categories/index.tmpl b/assets/templates/categories/index.tmpl new file mode 100644 index 0000000..9000a24 --- /dev/null +++ b/assets/templates/categories/index.tmpl @@ -0,0 +1,3 @@ +{{define "page:content"}} + {{template "categories:list" .}} +{{end}} diff --git a/assets/templates/categories/list.tmpl b/assets/templates/categories/list.tmpl new file mode 100644 index 0000000..94ce351 --- /dev/null +++ b/assets/templates/categories/list.tmpl @@ -0,0 +1,85 @@ +{{define "categories:list"}} + +
    + + + + + + + + + {{ + range .categories + }} + + + + + {{ + end + }} + +
    Name + + +
    + {{.Name}} + + + +
    +
    +{{ end }} diff --git a/assets/templates/categories/list_title.tmpl b/assets/templates/categories/list_title.tmpl new file mode 100644 index 0000000..bcc4c56 --- /dev/null +++ b/assets/templates/categories/list_title.tmpl @@ -0,0 +1,14 @@ +{{define "page:title"}} +
    +
    Categories
    +
    +
    + + +
    +{{end}} diff --git a/assets/templates/categories/update_title.tmpl b/assets/templates/categories/update_title.tmpl new file mode 100644 index 0000000..e2a8264 --- /dev/null +++ b/assets/templates/categories/update_title.tmpl @@ -0,0 +1,8 @@ +{{define "page:title"}} +
    +
    Edit Category
    +
    +
    + +
    +{{end}} diff --git a/assets/templates/full.tmpl b/assets/templates/full.tmpl new file mode 100644 index 0000000..b2343fc --- /dev/null +++ b/assets/templates/full.tmpl @@ -0,0 +1,28 @@ +{{define "full"}} + + + + + + + + BrainMinder + + + + + + + {{block "page:meta" . }} + {{ + end + }} + + +
    +
    {{template "page:content" .}}
    +
    + {{template "partial:footer" .}} + + +{{ end }} diff --git a/assets/templates/items/add_relation.tmpl b/assets/templates/items/add_relation.tmpl new file mode 100644 index 0000000..7b81eab --- /dev/null +++ b/assets/templates/items/add_relation.tmpl @@ -0,0 +1,45 @@ +{{define "item:add_relation"}} +{{ $relation_name := printf "%s%v" "ItemRelation-New-" .relatedItem.Id }} + + {{.relatedItem.Type_title}} : + {{.relatedItem.Title}} + + + {{ if gt (len .relatedItem.Categories) 0 }} + + {{ range (stringToArray .relatedItem.Categories "|")}} + {{ $category_name := index $.categoriesMap .}} +
    + {{ $category_name }} +
    + {{ end }} + {{ end }} + + + {{ if gt (len .relatedItem.Tags) 0 }} + + {{ range (stringToArray .relatedItem.Tags ",")}} +
    + {{ . }} +
    + {{ end }} + {{ end }} + + {{ widget_relation_type $relation_name "Link" `id="$relation_name" class="w3-input w3-border"` }} + +
    + Remove +
    + + + {{ end }} diff --git a/assets/templates/items/add_to_dashboard.tmpl b/assets/templates/items/add_to_dashboard.tmpl new file mode 100644 index 0000000..1ac31bd --- /dev/null +++ b/assets/templates/items/add_to_dashboard.tmpl @@ -0,0 +1,9 @@ +{{define "item:add_to_dashboard"}} + +{{ end }} \ No newline at end of file diff --git a/assets/templates/items/all_list.tmpl b/assets/templates/items/all_list.tmpl new file mode 100644 index 0000000..345ac1c --- /dev/null +++ b/assets/templates/items/all_list.tmpl @@ -0,0 +1,76 @@ +{{define "itemsAll:list"}} + +
    + + + + + + + + + + + + {{ template "itemsAll:list_rows" .}} + + +
    +{{ end }} diff --git a/assets/templates/items/all_list_rows.tmpl b/assets/templates/items/all_list_rows.tmpl new file mode 100644 index 0000000..43e6ae6 --- /dev/null +++ b/assets/templates/items/all_list_rows.tmpl @@ -0,0 +1,89 @@ +{{define "itemsAll:list_rows"}} +{{ $rowCount := 0 }} + + {{ range .items }} + + + + {{.Title}} + {{.Title}} + + {{.Type_title}} + + {{ if gt (len .Categories) 0 }} + + {{ range (stringToArray .Categories "|")}} + {{ $category_id := index $.categoriesMap .}} + {{ $category_id }} + {{ end }} + {{ end }} + + + {{ if gt (len .Tags) 0 }} + + {{ range (stringToArray .Tags ",")}} + {{ . }} + {{ end }} + {{ end }} + + + + {{ if eq .On_dashboard 1}} + {{ template "item:remove_from_dashboard" .Id }} + {{ else }} + {{ template "item:add_to_dashboard" .Id }} + {{ end }} + + + + + + + + + {{ end }} + {{ end }} diff --git a/assets/templates/items/all_list_title.tmpl b/assets/templates/items/all_list_title.tmpl new file mode 100644 index 0000000..3b39871 --- /dev/null +++ b/assets/templates/items/all_list_title.tmpl @@ -0,0 +1,9 @@ +{{define "page:title"}} +
    +
    All Items
    +
    +
    + + +
    +{{end}} \ No newline at end of file diff --git a/assets/templates/items/create_title.tmpl b/assets/templates/items/create_title.tmpl new file mode 100644 index 0000000..9ada960 --- /dev/null +++ b/assets/templates/items/create_title.tmpl @@ -0,0 +1,5 @@ +{{define "page:title"}} +
    +
    New {{ .type.Title}}
    +
    +{{end}} \ No newline at end of file diff --git a/assets/templates/items/fields.tmpl b/assets/templates/items/fields.tmpl new file mode 100644 index 0000000..657c0fb --- /dev/null +++ b/assets/templates/items/fields.tmpl @@ -0,0 +1,60 @@ +{{ define "items:fields" }} + +{{ range (index .FieldsSection .uisection) }} +{{ $field := .}} +{{ $values := (index $.FieldsValues .Type_field_id)}} + +{{ if eq .Is_multiple 1}} +
    + + +
    + {{ $g_counter := 0 }} + {{ range $counter, $value := $values}} + +
    +
    {{ field_widget $field.Widget $field.Type_field_id $counter "" $value $field.Valid_values ""}}
    +
    + + + +
    +
    + {{ $g_counter = $counter}} + {{ end }} +
    + + {{incr $g_counter }} + +
    +{{ else }} +

    + {{ $value := ""}} + {{ if gt (len $values) 0 }} + {{ $value = index $values 0 }} + {{ end }} + {{ field_widget .Widget .Type_field_id 0 .Title $value .Valid_values ""}} +

    +{{ end }} +{{ end }} + +{{ end }} \ No newline at end of file diff --git a/assets/templates/items/form.tmpl b/assets/templates/items/form.tmpl new file mode 100644 index 0000000..a22ff3e --- /dev/null +++ b/assets/templates/items/form.tmpl @@ -0,0 +1,254 @@ +{{ define "page:content" }} + +{{ $fields_present := false }} +{{ if (gt (len (index .item.FieldsSection "fields")) 0) }} +{{ $fields_present = true }} +{{ end }} + +
    +
    +
    + + General + + {{ if $fields_present }} + + Fields + + {{ end }} + + Relations + +
    + +
    +
    +
    +

    + + +

    +

    + {{ widget_select "Type_id" "Type" .item.Type_id .types `class="w3-input w3-border"` }} +

    +
    +
    +

    + {{ widget_checkboxes "Notebooks" "Notebooks" .item.Notebooks .notebooks `class="w3-check"` }} +

    +
    +
    + +
    + {{ template "items:fields" (map "FieldsSection" .item.FieldsSection "FieldsValues" .item.FieldsValues "uisection" "general")}} +
    + + {{ if eq .item.Type_show_summary 1}} +

    + + +

    + {{ end }} + + {{ if eq .item.Type_show_description 1}} +

    + + +

    + {{ end }} +
    +
    +

    + + +

    +
    +
    +

    + {{ widget_select "Categories" "Categories" .item.Categories .categories `multiple="true" class="w3-input w3-border"` }} +

    +
    +
    + +

    + On dashboard +

    +
    + + {{ if $fields_present }} + + {{ end }} + + +
    +

    + + {{ if not (eq .item.Id 0) }} + View + Delete + Share + {{ end }} + Back +

    + +
    +
    +
    + +
    + {{ if not (eq .item.Id 0) }} +
    + + +
    +
    + + +
    +
    + + +
    + {{ end }} +
    +
    +
    +{{ end }} diff --git a/assets/templates/items/form_jscode.tmpl b/assets/templates/items/form_jscode.tmpl new file mode 100644 index 0000000..e5dae46 --- /dev/null +++ b/assets/templates/items/form_jscode.tmpl @@ -0,0 +1,3 @@ +{{ define "jscode" }} + const easyMDE = new EasyMDE({element: document.getElementById("item-description"),forceSync: true}); +{{ end }} \ No newline at end of file diff --git a/assets/templates/items/index.tmpl b/assets/templates/items/index.tmpl new file mode 100644 index 0000000..fd19735 --- /dev/null +++ b/assets/templates/items/index.tmpl @@ -0,0 +1,3 @@ +{{define "page:content"}} + {{template "items:list" .}} +{{end}} diff --git a/assets/templates/items/index_all.tmpl b/assets/templates/items/index_all.tmpl new file mode 100644 index 0000000..4e15638 --- /dev/null +++ b/assets/templates/items/index_all.tmpl @@ -0,0 +1,3 @@ +{{define "page:content"}} + {{template "itemsAll:list" .}} +{{end}} diff --git a/assets/templates/items/list.tmpl b/assets/templates/items/list.tmpl new file mode 100644 index 0000000..2bbaef1 --- /dev/null +++ b/assets/templates/items/list.tmpl @@ -0,0 +1,85 @@ +{{define "items:list"}} + +
    + + + + + + + {{ range .Fields}} + + {{end}} + + + + + {{ template "items:list_rows" .}} + + +
    +{{ end }} diff --git a/assets/templates/items/list_for_relations.tmpl b/assets/templates/items/list_for_relations.tmpl new file mode 100644 index 0000000..377eb1d --- /dev/null +++ b/assets/templates/items/list_for_relations.tmpl @@ -0,0 +1,61 @@ +{{define "items:list-for-relations"}} + + + + + + + + + + + {{ range .items}} + {{ $relation_name := printf "%s%v%s" "ItemRelation-" .Id }} + + + + + + + {{ end }} + +
    ItemCategoriesTags
    + {{.Title}} + + {{ if gt (len .Categories) 0 }} + + {{ range (stringToArray .Categories "|")}} + {{ $category_name := index $.categoriesMap .}} +
    + {{ $category_name }} +
    + {{ end }} + {{ end }} +
    + {{ if gt (len .Tags) 0 }} + + {{ range (stringToArray .Tags ",")}} +
    + {{ . }} +
    + {{ end }} + {{ end }} +
    +
    + Add +
    +
    +{{ end }} diff --git a/assets/templates/items/list_rows.tmpl b/assets/templates/items/list_rows.tmpl new file mode 100644 index 0000000..01e1a64 --- /dev/null +++ b/assets/templates/items/list_rows.tmpl @@ -0,0 +1,98 @@ +{{define "items:list_rows"}} + +{{ $rowCount := 0 }} + +{{ range .items }} + + + {{.Title}} + {{.Title}} + + + {{ if gt (len .Categories) 0 }} + + {{ range (stringToArray .Categories "|")}} + {{ $category_name := index $.categoriesMap .}} + {{ $category_name }} + {{ end }} + {{ end }} + + + {{ if gt (len .Tags) 0 }} + + {{ range (stringToArray .Tags ",")}} + {{ . }} + {{ end }} + {{ end }} + + {{ $fieldsValuesMap := .FieldsValuesMap}} + {{ range $.Fields}} + + {{ $values_str := renderFieldValues (index $fieldsValuesMap .Type_field_id) .Widget }} + {{ if gt (len $values_str) 0 }} + {{.Title}} : {{ $values_str }} + {{ end }} + + {{end}} + + + {{ if eq .On_dashboard 1}} + {{ template "item:remove_from_dashboard" .Id }} + {{ else }} + {{ template "item:add_to_dashboard" .Id }} + {{ end }} + + + + + + + + + + {{ end }} +{{ end }} \ No newline at end of file diff --git a/assets/templates/items/list_title.tmpl b/assets/templates/items/list_title.tmpl new file mode 100644 index 0000000..5f511f4 --- /dev/null +++ b/assets/templates/items/list_title.tmpl @@ -0,0 +1,19 @@ +{{define "page:title"}} +
    +
    {{.type.Title}} Items
    +
    +
    + + + +
    +{{end}} \ No newline at end of file diff --git a/assets/templates/items/read.tmpl b/assets/templates/items/read.tmpl new file mode 100644 index 0000000..14bea48 --- /dev/null +++ b/assets/templates/items/read.tmpl @@ -0,0 +1,102 @@ +{{define "page:content"}} +
    +
    +
    {{ .item.Title }}
    + {{ if gt (len .item.Summary) 0}} +
    + {{.item.Summary_rendered | safeHTML}} +
    + {{ end }} + + {{.item.Description_rendered | safeHTML}} + + {{ if gt (len .fields) 0}} +
      + {{ range .fields }} +
    • {{.Title}} : {{ renderFieldValue .Value .Widget}}
    • + {{ end }} +
    + {{ end }} + + {{ template "item:relations_view" .}} + +
    +
    + {{if gt (len .item.Categories) 0 }} + + Categories + {{ range (stringToArray .item.Categories "|")}} + {{ $category_name := index $.categoriesMap .}} + + {{ end }} + {{ end }} +
    +
    + {{if gt (len .item.Tags) 0 }} + + Tags {{ range (stringToArray .item.Tags ",")}} +
    + {{ . }} +
    + {{ end }} + {{ end }} +
    +
    + + Edit + Share +
    +
    +
    +
    +
    + + +
    +
    + + +
    +
    +
    +{{ end }} diff --git a/assets/templates/items/read_title.tmpl b/assets/templates/items/read_title.tmpl new file mode 100644 index 0000000..a49d8b0 --- /dev/null +++ b/assets/templates/items/read_title.tmpl @@ -0,0 +1,8 @@ +{{define "page:title"}} +
    +
    {{ .item.Type_title }}
    +
    +
    + +
    +{{end}} diff --git a/assets/templates/items/relations.tmpl b/assets/templates/items/relations.tmpl new file mode 100644 index 0000000..ab10a36 --- /dev/null +++ b/assets/templates/items/relations.tmpl @@ -0,0 +1,88 @@ +{{define "item:relations"}} + + + + + + + + + + + +{{ range .item.Relations}} +{{ $relation_name := printf "%s%v-%v" "ItemRelation-" .Item_id .Related_item_id }} +{{ $relation_name_remove := printf "%s%v-%v" "ItemRelation-ToRemove-" .Item_id .Related_item_id }} + + + + + + + + {{ end }} + +
    ItemCategoriesTagsRelation type
    + {{ $target_id := .Related_item_id}} + {{ $relation_type := .Relation_type }} + {{ if eq .Related_item_id $.item.Id }} + {{ $target_id = .Item_id}} + {{ if eq "Parent" .Relation_type}} + {{ $relation_type = "Child" }} + {{ else if eq "Child" .Relation_type}} + {{ $relation_type = "Parent" }} + {{ end }} + {{ end }} + {{.Title}} + + + {{ if gt (len .Categories) 0 }} + + {{ range (stringToArray .Categories "|")}} + {{ $category_name := index $.categoriesMap .}} +
    + {{ $category_name }} +
    + {{ end }} + {{ end }} +
    + {{ if gt (len .Tags) 0 }} + + {{ range (stringToArray .Tags ",")}} +
    + {{ . }} +
    + {{ end }} + {{ end }} +
    {{ widget_relation_type $relation_name $relation_type `id="$relation_name" class="w3-input w3-border"` }} +
    + + +
    +
    + {{ end }} diff --git a/assets/templates/items/relations_view.tmpl b/assets/templates/items/relations_view.tmpl new file mode 100644 index 0000000..b7d54e3 --- /dev/null +++ b/assets/templates/items/relations_view.tmpl @@ -0,0 +1,37 @@ +{{define "item:relations_view"}} +{{ if (gt (len .relations) 0) }} +
    + Relations +
      + {{ + range.relations + }} + {{ $target_id := .Related_item_id}} + {{ $relation_type := .Relation_type }} + {{ if eq .Related_item_id $.item.Id }} + {{ $target_id = .Item_id}} + {{ if eq "Parent" .Relation_type}} + {{ $relation_type = "Child" }} + {{ else if eq "Child" .Relation_type}} + {{ $relation_type = "Parent" }} + {{ + end + }} + {{ + end + }} +
    • + + {{.Title}} +
    • + {{ + end + }} +
    +
    +{{ end }} +{{ end }} diff --git a/assets/templates/items/remove_from_dashboard.tmpl b/assets/templates/items/remove_from_dashboard.tmpl new file mode 100644 index 0000000..1b0ba88 --- /dev/null +++ b/assets/templates/items/remove_from_dashboard.tmpl @@ -0,0 +1,11 @@ +{{define "item:remove_from_dashboard"}} + + + +{{ end }} \ No newline at end of file diff --git a/assets/templates/items/share.tmpl b/assets/templates/items/share.tmpl new file mode 100644 index 0000000..24fefe0 --- /dev/null +++ b/assets/templates/items/share.tmpl @@ -0,0 +1,99 @@ +{{define "page:content"}} + + {{ end }} \ No newline at end of file diff --git a/assets/templates/items/update_title.tmpl b/assets/templates/items/update_title.tmpl new file mode 100644 index 0000000..ba73259 --- /dev/null +++ b/assets/templates/items/update_title.tmpl @@ -0,0 +1,8 @@ +{{define "page:title"}} +
    +
    Edit {{.item.Type_title}}
    +
    +
    + +
    +{{end}} \ No newline at end of file diff --git a/assets/templates/items/view.tmpl b/assets/templates/items/view.tmpl new file mode 100644 index 0000000..904d85b --- /dev/null +++ b/assets/templates/items/view.tmpl @@ -0,0 +1,76 @@ +{{define "page:content"}} + + {{ end }} \ No newline at end of file diff --git a/assets/templates/notebooks/create_title.tmpl b/assets/templates/notebooks/create_title.tmpl new file mode 100644 index 0000000..7379908 --- /dev/null +++ b/assets/templates/notebooks/create_title.tmpl @@ -0,0 +1,8 @@ +{{define "page:title"}} +
    +
    New Notebook
    +
    +
    + +
    +{{end}} diff --git a/assets/templates/notebooks/form.tmpl b/assets/templates/notebooks/form.tmpl new file mode 100644 index 0000000..88ecff3 --- /dev/null +++ b/assets/templates/notebooks/form.tmpl @@ -0,0 +1,75 @@ +{{ define "page:content" }} +
    +
    +

    + + +

    + +

    + + +

    + +

    + + +

    + +

    + + Back +

    +
    +
    +
    +
    + + + +
    {{template "page:title" .}}
    + +
    +
    + +
    + {{template "page:content" .}} +
    +
    +
    +
    + +
    +
    + + +
    +
    + +{{ end }} diff --git a/assets/templates/notebooks/index.tmpl b/assets/templates/notebooks/index.tmpl new file mode 100644 index 0000000..d6c64e2 --- /dev/null +++ b/assets/templates/notebooks/index.tmpl @@ -0,0 +1,3 @@ +{{define "page:content"}} + {{template "notebooks:list" .}} +{{end}} diff --git a/assets/templates/notebooks/list.tmpl b/assets/templates/notebooks/list.tmpl new file mode 100644 index 0000000..2344d62 --- /dev/null +++ b/assets/templates/notebooks/list.tmpl @@ -0,0 +1,84 @@ +{{define "notebooks:list"}} + +
    + + + + + + + + + {{ + range .notebooks + }} + + + + + {{ + end + }} + +
    Title + + +
    + {{.Title}} + + + +
    +
    +{{ end }} diff --git a/assets/templates/notebooks/list_title.tmpl b/assets/templates/notebooks/list_title.tmpl new file mode 100644 index 0000000..6a5be5e --- /dev/null +++ b/assets/templates/notebooks/list_title.tmpl @@ -0,0 +1,14 @@ +{{define "page:title"}} +
    +
    Notebooks
    +
    +
    + + +
    + +{{end}} diff --git a/assets/templates/notebooks/update_title.tmpl b/assets/templates/notebooks/update_title.tmpl new file mode 100644 index 0000000..2343a0b --- /dev/null +++ b/assets/templates/notebooks/update_title.tmpl @@ -0,0 +1,8 @@ +{{define "page:title"}} +
    +
    Edit Notebook
    +
    +
    + +
    +{{end}} diff --git a/assets/templates/pages/forgotten-password-confirmation.tmpl b/assets/templates/pages/forgotten-password-confirmation.tmpl new file mode 100644 index 0000000..c9e3993 --- /dev/null +++ b/assets/templates/pages/forgotten-password-confirmation.tmpl @@ -0,0 +1,6 @@ +{{define "page:title"}}Check your inbox{{end}} + +{{define "page:main"}} +

    Check your inbox

    +

    We've emailed you instructions for resetting your password. You should receive the email shortly.

    +{{end}} diff --git a/assets/templates/pages/forgotten-password.tmpl b/assets/templates/pages/forgotten-password.tmpl new file mode 100644 index 0000000..61a8b64 --- /dev/null +++ b/assets/templates/pages/forgotten-password.tmpl @@ -0,0 +1,21 @@ +{{define "page:title"}}Forgotten password{{end}} + +{{define "page:main"}} +

    Forgotten password

    +

    Enter your email address below and we'll send you instructions for setting a new password.

    +
    + + + {{if .Form.Validator.HasErrors}} +
    Something was wrong. Please correct the errors below and try again.
    + {{end}} +
    + + {{with .Form.Validator.FieldErrors.Email}} + {{.}} + {{end}} + +
    + +
    +{{end}} diff --git a/assets/templates/pages/home.tmpl b/assets/templates/pages/home.tmpl new file mode 100644 index 0000000..eb33d47 --- /dev/null +++ b/assets/templates/pages/home.tmpl @@ -0,0 +1,8 @@ +{{define "page:content"}} +
    + + {{ template "home:items" .}} + +
    + +{{ end }} diff --git a/assets/templates/pages/home_items.tmpl b/assets/templates/pages/home_items.tmpl new file mode 100644 index 0000000..76cf518 --- /dev/null +++ b/assets/templates/pages/home_items.tmpl @@ -0,0 +1,77 @@ +{{define "home:items"}} + +{{ $itemCount := 0 }} + +{{ range.items }} +
    +
    +
    +
    +
    + {{.Title}} + + {{.Title}} + +
    +
    + {{.Summary | markdownfy | safeHTML}} +
    +
    +
    + + + + + + + + +
    +
    + +
    +
    + {{ end }} + + {{ end }} \ No newline at end of file diff --git a/assets/templates/pages/home_title.tmpl b/assets/templates/pages/home_title.tmpl new file mode 100644 index 0000000..e26fd47 --- /dev/null +++ b/assets/templates/pages/home_title.tmpl @@ -0,0 +1,8 @@ +{{define "page:title"}} +
    +
    Dashboard
    +
    +
    + +
    +{{ end }} diff --git a/assets/templates/pages/login.tmpl b/assets/templates/pages/login.tmpl new file mode 100644 index 0000000..b767d28 --- /dev/null +++ b/assets/templates/pages/login.tmpl @@ -0,0 +1,22 @@ +{{define "page:title"}}Login{{ end }} + +{{define "page:content"}} + +
    +
    +

    BrainMinder

    +
    + +

    + + +

    +

    + + +

    + +
    +
    +
    +{{ end }} diff --git a/assets/templates/pages/password-reset-confirmation.tmpl b/assets/templates/pages/password-reset-confirmation.tmpl new file mode 100644 index 0000000..4e1833e --- /dev/null +++ b/assets/templates/pages/password-reset-confirmation.tmpl @@ -0,0 +1,6 @@ +{{define "page:title"}}Password reset successful{{end}} + +{{define "page:main"}} +

    Password reset successful

    +

    Please login.

    +{{end}} diff --git a/assets/templates/pages/password-reset.tmpl b/assets/templates/pages/password-reset.tmpl new file mode 100644 index 0000000..91e0247 --- /dev/null +++ b/assets/templates/pages/password-reset.tmpl @@ -0,0 +1,31 @@ +{{define "page:title"}}Set a new password{{end}} + +{{define "page:meta"}} + +{{end}} + +{{define "page:main"}} +{{if .InvalidLink}} +

    Invalid password reset link

    +

    The password reset link was invalid, possibly because it has already been used or has expired.

    +

    Get a new password reset link

    +{{else}} +

    Set a new password

    +

    Please enter a new password.

    +
    + + + {{if .Form.Validator.HasErrors}} +
    Something was wrong. Please correct the errors below and try again.
    + {{end}} +
    + + {{with .Form.Validator.FieldErrors.NewPassword}} + {{.}} + {{end}} + +
    + +
    +{{end}} +{{end}} diff --git a/assets/templates/pages/signup.tmpl b/assets/templates/pages/signup.tmpl new file mode 100644 index 0000000..faaa796 --- /dev/null +++ b/assets/templates/pages/signup.tmpl @@ -0,0 +1,28 @@ +{{define "page:title"}}Signup{{end}} + +{{define "page:content"}} +

    Signup

    + +
    + + + {{if .Form.Validator.HasErrors}} +
    Something was wrong. Please correct the errors below and try again.
    + {{end}} +
    + + {{with .Form.Validator.FieldErrors.Email}} + {{.}} + {{end}} + +
    +
    + + {{with .Form.Validator.FieldErrors.Password}} + {{.}} + {{end}} + +
    + +
    +{{end}} diff --git a/assets/templates/partials/footer.tmpl b/assets/templates/partials/footer.tmpl new file mode 100644 index 0000000..aa6d239 --- /dev/null +++ b/assets/templates/partials/footer.tmpl @@ -0,0 +1,9 @@ +{{define "partial:footer"}} + + + + + + + +{{end}} diff --git a/assets/templates/partials/message.tmpl b/assets/templates/partials/message.tmpl new file mode 100644 index 0000000..a68717c --- /dev/null +++ b/assets/templates/partials/message.tmpl @@ -0,0 +1,16 @@ +{{define "message"}} +{{ if len .messageContent}} +{{ $messageClass := ""}} +{{if eq .messageType "success"}} {{ $messageClass = "alert-success"}} +{{else if eq .messageType "failure"}} {{ $messageClass = "alert-failure"}} +{{ end }} +
    +

    {{.messageContent}}

    +
      + {{ range $field, $fieldMessage := .messageFieldErrors }} +
    • {{ $fieldMessage }}
    • + {{ end }} +
    +
    +{{ end }} +{{ end }} diff --git a/assets/templates/partials/nav.tmpl b/assets/templates/partials/nav.tmpl new file mode 100644 index 0000000..3f35783 --- /dev/null +++ b/assets/templates/partials/nav.tmpl @@ -0,0 +1,15 @@ +{{define "partial:nav"}} + +{{end}} diff --git a/assets/templates/partials/notebooks-list.tmpl b/assets/templates/partials/notebooks-list.tmpl new file mode 100644 index 0000000..c8ac920 --- /dev/null +++ b/assets/templates/partials/notebooks-list.tmpl @@ -0,0 +1,4 @@ + +{{define "partial:notebooks-list"}} +{{ widget_select "current_notebook_id" "" .current_notebook_id .notebooksList `hx-on:change="bm_sidebar_click('main-sidebar')" hx-post="/" hx-push-url="true" hx-target="#page-content" hx-trigger="change" id="current_notebook_id" class="w3-input w3-border"` }} +{{ end }} \ No newline at end of file diff --git a/assets/templates/partials/sidebar.tmpl b/assets/templates/partials/sidebar.tmpl new file mode 100644 index 0000000..d1dd6bf --- /dev/null +++ b/assets/templates/partials/sidebar.tmpl @@ -0,0 +1,128 @@ +{{define "partial:sidebar"}} + +
    + +{{ end }} diff --git a/assets/templates/partials/types-list.tmpl b/assets/templates/partials/types-list.tmpl new file mode 100644 index 0000000..25e0f80 --- /dev/null +++ b/assets/templates/partials/types-list.tmpl @@ -0,0 +1,23 @@ +{{define "partial:types-list"}} +
    + {{ range .typesList }} +
    +
    + +
    + +
    + {{ end }} +
    + {{ end }} \ No newline at end of file diff --git a/assets/templates/quickbox/add.tmpl b/assets/templates/quickbox/add.tmpl new file mode 100644 index 0000000..901dc10 --- /dev/null +++ b/assets/templates/quickbox/add.tmpl @@ -0,0 +1,10 @@ +{{define "quickbox:add"}} +
    +
    + + +
    +
    {{.quicknote.Note_rendered | safeHTML}}
    +
    +{{end}} \ No newline at end of file diff --git a/assets/templates/quickbox/list.tmpl b/assets/templates/quickbox/list.tmpl new file mode 100644 index 0000000..f6328a9 --- /dev/null +++ b/assets/templates/quickbox/list.tmpl @@ -0,0 +1,24 @@ +{{define "quickbox:list"}} +{{ $rowCount := 0 }} +{{ range .quicknotes}} +
    +
    + + +
    +
    {{.Note_rendered | safeHTML}}
    +
    +{{ end }} +{{ end }} \ No newline at end of file diff --git a/assets/templates/quickbox/transform.tmpl b/assets/templates/quickbox/transform.tmpl new file mode 100644 index 0000000..fb78fbd --- /dev/null +++ b/assets/templates/quickbox/transform.tmpl @@ -0,0 +1,107 @@ +{{define "page:content"}} + +{{ end }} diff --git a/assets/templates/types/create_title.tmpl b/assets/templates/types/create_title.tmpl new file mode 100644 index 0000000..25f33b8 --- /dev/null +++ b/assets/templates/types/create_title.tmpl @@ -0,0 +1,8 @@ +{{define "page:title"}} +
    +
    New Type
    +
    +
    + +
    +{{end}} diff --git a/assets/templates/types/field_new.tmpl b/assets/templates/types/field_new.tmpl new file mode 100644 index 0000000..5f7e752 --- /dev/null +++ b/assets/templates/types/field_new.tmpl @@ -0,0 +1,92 @@ +{{define "type:field_new"}} +
    +
    +
    + {{ widget_select (print "Fields-New-" .counter "-Widget_id") "Widget" "" .widgets `class="w3-input w3-border"` }} +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + + +
    +
    +
    +
    +

    + + +

    +

    + + +

    +

    + + +

    +
    +
    + {{ widget_select (print "Fields-" .Type_field_id "-Ui_section") "Section" "general" $.uisections `class="w3-input w3-border"` }} +
    +
    +
    + +
    +
    +{{ end }} diff --git a/assets/templates/types/fields.tmpl b/assets/templates/types/fields.tmpl new file mode 100644 index 0000000..8b61d17 --- /dev/null +++ b/assets/templates/types/fields.tmpl @@ -0,0 +1,112 @@ +{{define "types:fields"}} +{{ range .fields }} +
    +
    +
    +
    + {{ widget_select (print "Fields-" .Type_field_id "-Widget_id") "Widget" .Widget_id $.widgets `class="w3-input w3-border"` }} +
    +
    + + +
    +
    + +
    +
    + + +
    +
    + {{ widget_select (print "Fields-" .Type_field_id "-Ui_section") "Section" .Ui_section $.uisections `class="w3-input w3-border"` }} +
    +
    +
    +

    + + +

    +

    + + +

    +

    + + +

    +
    + +
    +
    + + +
    +
    +{{ end }} +{{ end }} diff --git a/assets/templates/types/form.tmpl b/assets/templates/types/form.tmpl new file mode 100644 index 0000000..8459dcb --- /dev/null +++ b/assets/templates/types/form.tmpl @@ -0,0 +1,145 @@ +{{ define "page:content" }} +
    +
    + + +
    +
    +
    +

    + + +

    +

    + + +

    +
    +
    +

    + {{ widget_checkboxes "Notebooks" "Notebooks" .type.Notebooks .notebooks `class="w3-check"` }} +

    +
    +
    + +

    + + +

    + +

    + Show summary +

    + +

    + Show description +

    +
    + + + +

    + + Back +

    +
    +
    +
    +
    + +
    +
    + +
    +
    +
    +
    +{{ end }} diff --git a/assets/templates/types/index.tmpl b/assets/templates/types/index.tmpl new file mode 100644 index 0000000..c240411 --- /dev/null +++ b/assets/templates/types/index.tmpl @@ -0,0 +1,3 @@ +{{define "page:content"}} + {{template "types:list" .}} +{{end}} diff --git a/assets/templates/types/list.tmpl b/assets/templates/types/list.tmpl new file mode 100644 index 0000000..ae75af4 --- /dev/null +++ b/assets/templates/types/list.tmpl @@ -0,0 +1,93 @@ +{{define "types:list"}} + +
    + + + + + + + + + {{ + range .types + }} + + + + + {{ + end + }} + +
    Title + + +
    + {{.Title}} + + + +
    +
    +{{ end }} diff --git a/assets/templates/types/list_title.tmpl b/assets/templates/types/list_title.tmpl new file mode 100644 index 0000000..c5c2e98 --- /dev/null +++ b/assets/templates/types/list_title.tmpl @@ -0,0 +1,15 @@ +{{define "page:title"}} +
    +
    Types
    +
    +
    + + +
    +{{end}} diff --git a/assets/templates/types/update_title.tmpl b/assets/templates/types/update_title.tmpl new file mode 100644 index 0000000..c4c9786 --- /dev/null +++ b/assets/templates/types/update_title.tmpl @@ -0,0 +1,9 @@ +{{define "page:title"}} +
    +
    Edit Type
    +
    +
    + +
    + +{{end}} diff --git a/cmd/web/application.go b/cmd/web/application.go new file mode 100644 index 0000000..2d86bd6 --- /dev/null +++ b/cmd/web/application.go @@ -0,0 +1,110 @@ +package main + +import ( + "crypto/rand" + "encoding/hex" + "log/slog" + "net/http" + "strconv" + "sync" + + "brainminder.speedtech.it/internal/database" + "brainminder.speedtech.it/internal/funcs" + "brainminder.speedtech.it/internal/smtp" + "brainminder.speedtech.it/models" + "github.com/gorilla/sessions" +) + +type application struct { + config config + db *database.DB + logger *slog.Logger + mailer *smtp.Mailer + sessionStore *sessions.CookieStore + wg sync.WaitGroup +} + +func (app *application) getCurrentNotebok_id(r *http.Request) int64 { + session, _ := app.sessionStore.Get(r, "session") + current_notebook_id := session.Values["current_notebook_id"] + var notebook_id int64 = -1 + if current_notebook_id != nil { + notebook_id, _ = strconv.ParseInt(current_notebook_id.(string), 10, 64) + } + return notebook_id +} + +func (app *application) saveSessionValue(w http.ResponseWriter, r *http.Request, name string, value any) { + session, err := app.sessionStore.Get(r, "sessions") + if err != nil { + app.serverError(w, r, err) + return + } + + session.Values[name] = value + + err = session.Save(r, w) + if err != nil { + app.serverError(w, r, err) + return + } +} + +func (app *application) getSessionValue(w http.ResponseWriter, r *http.Request, name string) any { + session, err := app.sessionStore.Get(r, "sessions") + if err != nil { + app.serverError(w, r, err) + return nil + } + + if value, isMapContainsKey := session.Values[name]; isMapContainsKey { + return value + } + return nil +} + +func (app *application) removeSessionValue(w http.ResponseWriter, r *http.Request, name string) { + session, err := app.sessionStore.Get(r, "sessions") + if err != nil { + app.serverError(w, r, err) + return + } + + delete(session.Values, name) + + err = session.Save(r, w) + if err != nil { + app.serverError(w, r, err) + } +} + +func (app *application) getCategoriesAsOptions() []funcs.WidgetOption { + categoryModel := &models.CategoryModel{DB: app.db} + return categoryModel.AllAsOptions() +} + +func (app *application) getCategoriesAsMap() map[string]string { + categoryModel := &models.CategoryModel{DB: app.db} + return categoryModel.AllAsMap() +} + +func (app *application) getTypesAsOptions(r *http.Request) []funcs.WidgetOption { + typeModel := &models.TypeModel{DB: app.db} + criteria := map[string]any{ + "notebook_id": app.getCurrentNotebok_id(r), + } + return typeModel.FindAsOptions(criteria) +} + +func (app *application) getNotebooksAsOptions() []funcs.WidgetOption { + notebookModel := &models.NotebookModel{DB: app.db} + return notebookModel.AllAsOptions(false) +} + +func (app *application) generateSecureToken(length int) string { + b := make([]byte, length) + if _, err := rand.Read(b); err != nil { + return "" + } + return hex.EncodeToString(b) +} diff --git a/cmd/web/categories_handler.go b/cmd/web/categories_handler.go new file mode 100644 index 0000000..01e66cb --- /dev/null +++ b/cmd/web/categories_handler.go @@ -0,0 +1,273 @@ +package main + +import ( + "bytes" + "fmt" + "net/http" + "strconv" + + "brainminder.speedtech.it/internal/request" + "brainminder.speedtech.it/internal/response" + "brainminder.speedtech.it/internal/validator" + "brainminder.speedtech.it/models" + "github.com/alexedwards/flow" +) + +type categoryForm struct { + Id int64 `form:"Id"` + Name string `form:"Name"` + Validator validator.Validator `form:"-"` +} + +func (form *categoryForm) Validate(w http.ResponseWriter, r *http.Request, app *application, data map[string]any) bool { + var fullBuf = new(bytes.Buffer) + + form.Validator.CheckField(form.Name != "", "Name", "Name is required") + + if form.Validator.HasErrors() { + w.Header().Add("HX-Retarget", "#message") + + data["messageType"] = "failure" + data["messageContent"] = "Impossible to save the type" + data["messageFieldErrors"] = form.Validator.FieldErrors + + buf, err := response.Fragment([]string{"partials/message.tmpl"}, "message", data) + if err != nil { + app.serverError(w, r, err) + } + fullBuf.Write(buf.Bytes()) + + if err != nil { + app.serverError(w, r, err) + } + fullBuf.WriteTo(w) + + w.WriteHeader(http.StatusUnprocessableEntity) + return false + } + + return true +} + +func (app *application) categories(w http.ResponseWriter, r *http.Request) { + data := app.newTemplateData(r) + + categoryModel := &models.CategoryModel{DB: app.db} + rows, _, _ := categoryModel.All() + + data["categories"] = &rows + data["messageType"] = "" + data["messageContent"] = "" + + if r.Header.Get("HX-Request") == "true" { + var fullBuf = new(bytes.Buffer) + + err := response.HXFragment(fullBuf, []string{"categories/list.tmpl"}, "categories:list", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"categories/list_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"categories/index.tmpl", "categories/list.tmpl", "categories/list_title.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + + w.WriteHeader(http.StatusOK) +} + +func (app *application) categoryCreate(w http.ResponseWriter, r *http.Request) { + categoryModel := &models.CategoryModel{DB: app.db} + var fullBuf = new(bytes.Buffer) + var category_id int64 + + data := app.newTemplateData(r) + data["formAction"] = "/category/create" + data["formTarget"] = "#page-content" + data["messageType"] = "" + data["messageContent"] = "" + + switch r.Method { + case http.MethodGet: + + data["category"] = categoryForm{ + Name: "", + } + + if r.Header.Get("HX-Request") == "true" { + err := response.HXFragment(fullBuf, []string{"categories/form.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"categories/create_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"categories/create_title.tmpl", "categories/form.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + + case http.MethodPost: + var categoryFromForm categoryForm + + err := request.DecodePostForm(r, &categoryFromForm) + if err != nil { + app.serverError(w, r, err) + } + + if !categoryFromForm.Validate(w, r, app, data) { + return + } + + category := &models.Category{ + Name: categoryFromForm.Name, + } + + category_id, err = categoryModel.Create(category) + if err != nil { + app.badRequest(w, err) + return + } + + data["formAction"] = fmt.Sprint("/category/update/", category_id) + data["formTarget"] = "#message" + + data["category"] = categoryForm{ + Id: category_id, + Name: category.Name, + } + + err = response.HXFragment(fullBuf, []string{"categories/form.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"categories/update_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + dataMessage := make(map[string]string) + dataMessage["messageType"] = "success" + dataMessage["messageContent"] = "Category created successfully" + err = response.HXFragmentOOB(fullBuf, []string{"partials/message.tmpl"}, "message", dataMessage, "message") + if err != nil { + app.serverError(w, r, err) + } + + w.Header().Add("HX-Replace-Url", fmt.Sprint("/type/update/", category_id)) + fullBuf.WriteTo(w) + + w.WriteHeader(http.StatusUnprocessableEntity) + } +} + +func (app *application) categoryUpdate(w http.ResponseWriter, r *http.Request) { + categoryModel := &models.CategoryModel{DB: app.db} + category_id_str := flow.Param(r.Context(), "category_id") + category_id, _ := strconv.Atoi(category_id_str) + category, _, _ := categoryModel.One(category_id) + + data := app.newTemplateData(r) + data["formAction"] = "/category/update/" + category_id_str + data["formTarget"] = "#message" + data["messageType"] = "" + data["messageContent"] = "" + + var fullBuf = new(bytes.Buffer) + + switch r.Method { + case http.MethodGet: + + data["category"] = categoryForm{ + Id: category.Id, + Name: category.Name, + } + + if r.Header.Get("HX-Request") == "true" { + + err := response.HXFragment(fullBuf, []string{"categories/form.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"categories/update_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"categories/update_title.tmpl", "categories/form.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + + case http.MethodPost: + var categoryFromForm categoryForm + + err := request.DecodePostForm(r, &categoryFromForm) + if err != nil { + app.serverError(w, r, err) + } + + if !categoryFromForm.Validate(w, r, app, data) { + return + } + + category.Name = categoryFromForm.Name + + err = categoryModel.Update(category) + if err != nil { + app.badRequest(w, err) + return + } + + data["category"] = categoryForm{ + Id: category.Id, + Name: category.Name, + } + + dataMessage := make(map[string]string) + dataMessage["messageType"] = "success" + dataMessage["messageContent"] = "Category saved successfully" + err = response.HXFragment(fullBuf, []string{"partials/message.tmpl"}, "message", dataMessage) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"categories/update_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + + w.WriteHeader(http.StatusUnprocessableEntity) + } +} + +func (app *application) categoryDelete(w http.ResponseWriter, r *http.Request) { + categoryModel := &models.CategoryModel{DB: app.db} + category_id_str := flow.Param(r.Context(), "category_id") + category_id, _ := strconv.Atoi(category_id_str) + + _, err := categoryModel.Delete(category_id) + if err != nil { + app.serverError(w, r, err) + } +} diff --git a/cmd/web/config.go b/cmd/web/config.go new file mode 100644 index 0000000..b80f91c --- /dev/null +++ b/cmd/web/config.go @@ -0,0 +1,24 @@ +package main + +type config struct { + baseURL string + httpPort int + cookie struct { + secretKey string + } + db struct { + dsn string + automigrate bool + } + session struct { + secretKey string + oldSecretKey string + } + smtp struct { + host string + port int + username string + password string + from string + } +} diff --git a/cmd/web/context.go b/cmd/web/context.go new file mode 100644 index 0000000..6b94200 --- /dev/null +++ b/cmd/web/context.go @@ -0,0 +1,28 @@ +package main + +import ( + "context" + "net/http" + + "brainminder.speedtech.it/internal/database" +) + +type contextKey string + +const ( + authenticatedUserContextKey = contextKey("authenticatedUser") +) + +func contextSetAuthenticatedUser(r *http.Request, user *database.User) *http.Request { + ctx := context.WithValue(r.Context(), authenticatedUserContextKey, user) + return r.WithContext(ctx) +} + +func contextGetAuthenticatedUser(r *http.Request) *database.User { + user, ok := r.Context().Value(authenticatedUserContextKey).(*database.User) + if !ok { + return nil + } + + return user +} diff --git a/cmd/web/errors.go b/cmd/web/errors.go new file mode 100644 index 0000000..c0832eb --- /dev/null +++ b/cmd/web/errors.go @@ -0,0 +1,35 @@ +package main + +import ( + "log/slog" + "net/http" + "runtime/debug" +) + +func (app *application) reportServerError(r *http.Request, err error) { + var ( + message = err.Error() + method = r.Method + url = r.URL.String() + trace = string(debug.Stack()) + ) + + requestAttrs := slog.Group("request", "method", method, "url", url) + app.logger.Error(message, requestAttrs, "trace", trace) +} + +func (app *application) serverError(w http.ResponseWriter, r *http.Request, err error) { + app.reportServerError(r, err) + + message := "The server encountered a problem and could not process your request" + http.Error(w, message, http.StatusInternalServerError) +} + +func (app *application) notFound(w http.ResponseWriter, r *http.Request) { + message := "The requested resource could not be found" + http.Error(w, message, http.StatusNotFound) +} + +func (app *application) badRequest(w http.ResponseWriter, err error) { + http.Error(w, err.Error(), http.StatusBadRequest) +} diff --git a/cmd/web/handlers.go b/cmd/web/handlers.go new file mode 100644 index 0000000..4ab7c6f --- /dev/null +++ b/cmd/web/handlers.go @@ -0,0 +1,437 @@ +package main + +import ( + "bytes" + "net/http" + "strconv" + "time" + + "brainminder.speedtech.it/internal/password" + "brainminder.speedtech.it/internal/request" + "brainminder.speedtech.it/internal/response" + "brainminder.speedtech.it/internal/token" + "brainminder.speedtech.it/internal/validator" + "brainminder.speedtech.it/models" + + "github.com/alexedwards/flow" +) + +func (app *application) home(w http.ResponseWriter, r *http.Request) { + session, _ := app.sessionStore.Get(r, "session") + current_notebook_id := session.Values["current_notebook_id"] + params := r.URL.Query() + + if r.Method == http.MethodPost { + err := r.ParseForm() + if err != nil { + app.serverError(w, r, err) + return + } + current_notebook_id = r.PostForm.Get("current_notebook_id") + session.Values["current_notebook_id"] = current_notebook_id + session.Save(r, w) + } + + var fullBuf = new(bytes.Buffer) + + data := app.newTemplateData(r) + itemModel := models.NewItemModel(app.db) + + var notebook_id int64 = -1 + if current_notebook_id != nil { + notebook_id, _ = strconv.ParseInt(current_notebook_id.(string), 10, 64) + } + + criteria := map[string]any{ + "On_dashboard": 1, + "notebook_id": notebook_id, + } + + offset_str := r.URL.Query().Get("offset") + if len(offset_str) == 0 { + offset_str = "0" + } + offset, _ := strconv.ParseInt(offset_str, 10, 64) + + items, _, _ := itemModel.Find(criteria, offset) + data["items"] = items + data["offset"] = offset + + if r.Header.Get("HX-Request") == "true" { + out := params.Get("out") + + if out == "items" { + err := response.HXFragment(fullBuf, []string{"pages/home_items.tmpl"}, "home:items", data) + if err != nil { + app.serverError(w, r, err) + } + } else { + err := response.HXFragment(fullBuf, []string{"pages/home.tmpl", "pages/home_items.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"pages/home_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + } + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"pages/home.tmpl", "pages/home_items.tmpl", "pages/home_title.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } +} + +func (app *application) signup(w http.ResponseWriter, r *http.Request) { + var form struct { + Email string `form:"Email"` + Password string `form:"Password"` + Validator validator.Validator `form:"-"` + } + + switch r.Method { + case http.MethodGet: + data := app.newTemplateData(r) + data["Form"] = form + + err := response.Page(w, http.StatusOK, data, []string{"pages/signup.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + + case http.MethodPost: + err := request.DecodePostForm(r, &form) + if err != nil { + app.badRequest(w, err) + return + } + + _, found, err := app.db.GetUserByEmail(form.Email) + if err != nil { + app.serverError(w, r, err) + return + } + + form.Validator.CheckField(form.Email != "", "Email", "Email is required") + form.Validator.CheckField(validator.Matches(form.Email, validator.RgxEmail), "Email", "Must be a valid email address") + form.Validator.CheckField(!found, "Email", "Email is already in use") + + form.Validator.CheckField(form.Password != "", "Password", "Password is required") + form.Validator.CheckField(len(form.Password) >= 8, "Password", "Password is too short") + form.Validator.CheckField(len(form.Password) <= 72, "Password", "Password is too long") + form.Validator.CheckField(validator.NotIn(form.Password, password.CommonPasswords...), "Password", "Password is too common") + + if form.Validator.HasErrors() { + data := app.newTemplateData(r) + data["Form"] = form + + err := response.Page(w, http.StatusUnprocessableEntity, data, []string{"pages/signup.tmpl"}, "full") + if err != nil { + app.serverError(w, r, err) + } + return + } + + hashedPassword, err := password.Hash(form.Password) + if err != nil { + app.serverError(w, r, err) + return + } + + id, err := app.db.InsertUser(form.Email, hashedPassword) + if err != nil { + app.serverError(w, r, err) + return + } + + session, err := app.sessionStore.Get(r, "session") + if err != nil { + app.serverError(w, r, err) + return + } + + session.Values["userID"] = id + + err = session.Save(r, w) + if err != nil { + app.serverError(w, r, err) + return + } + + http.Redirect(w, r, "/", http.StatusSeeOther) + } +} + +func (app *application) login(w http.ResponseWriter, r *http.Request) { + var form struct { + Email string `form:"Email"` + Password string `form:"Password"` + Validator validator.Validator `form:"-"` + } + + switch r.Method { + case http.MethodGet: + data := app.newTemplateData(r) + data["Form"] = form + + err := response.Page(w, http.StatusOK, data, []string{"pages/login.tmpl"}, "full") + if err != nil { + app.serverError(w, r, err) + } + + case http.MethodPost: + err := request.DecodePostForm(r, &form) + if err != nil { + app.badRequest(w, err) + return + } + + user, found, err := app.db.GetUserByEmail(form.Email) + if err != nil { + app.serverError(w, r, err) + return + } + + form.Validator.CheckField(form.Email != "", "Email", "Email is required") + form.Validator.CheckField(found, "Email", "Email address could not be found") + + if found { + passwordMatches, err := password.Matches(form.Password, user.HashedPassword) + if err != nil { + app.serverError(w, r, err) + return + } + + form.Validator.CheckField(form.Password != "", "Password", "Password is required") + form.Validator.CheckField(passwordMatches, "Password", "Password is incorrect") + } + + if form.Validator.HasErrors() { + data := app.newTemplateData(r) + data["Form"] = form + + err := response.Page(w, http.StatusUnprocessableEntity, data, []string{"pages/login.tmpl"}, "full") + if err != nil { + app.serverError(w, r, err) + } + return + } + + session, err := app.sessionStore.Get(r, "session") + if err != nil { + app.serverError(w, r, err) + return + } + + session.Values["userID"] = user.ID + + redirectPath, ok := session.Values["redirectPathAfterLogin"].(string) + if ok { + delete(session.Values, "redirectPathAfterLogin") + } else { + redirectPath = "/" + } + + err = session.Save(r, w) + if err != nil { + app.serverError(w, r, err) + return + } + + http.Redirect(w, r, redirectPath, http.StatusSeeOther) + } +} + +func (app *application) logout(w http.ResponseWriter, r *http.Request) { + session, err := app.sessionStore.Get(r, "session") + if err != nil { + app.serverError(w, r, err) + return + } + + delete(session.Values, "userID") + + err = session.Save(r, w) + if err != nil { + app.serverError(w, r, err) + return + } + + http.Redirect(w, r, "/login", http.StatusSeeOther) +} + +func (app *application) forgottenPassword(w http.ResponseWriter, r *http.Request) { + var form struct { + Email string `form:"Email"` + Validator validator.Validator `form:"-"` + } + + switch r.Method { + case http.MethodGet: + data := app.newTemplateData(r) + data["Form"] = form + + err := response.Page(w, http.StatusOK, data, []string{"pages/forgotten-password.tmpl"}, "full") + if err != nil { + app.serverError(w, r, err) + } + + case http.MethodPost: + err := request.DecodePostForm(r, &form) + if err != nil { + app.badRequest(w, err) + return + } + + user, found, err := app.db.GetUserByEmail(form.Email) + if err != nil { + app.serverError(w, r, err) + return + } + + form.Validator.CheckField(form.Email != "", "Email", "Email is required") + form.Validator.CheckField(validator.Matches(form.Email, validator.RgxEmail), "Email", "Must be a valid email address") + form.Validator.CheckField(found, "Email", "No matching email found") + + if form.Validator.HasErrors() { + data := app.newTemplateData(r) + data["Form"] = form + + err := response.Page(w, http.StatusUnprocessableEntity, data, []string{"pages/forgotten-password.tmpl"}, "full") + if err != nil { + app.serverError(w, r, err) + } + return + } + + plaintextToken, err := token.New() + if err != nil { + app.serverError(w, r, err) + return + } + + hashedToken := token.Hash(plaintextToken) + + err = app.db.InsertPasswordReset(hashedToken, user.ID, 24*time.Hour) + if err != nil { + app.serverError(w, r, err) + return + } + + data := app.newEmailData() + data["PlaintextToken"] = plaintextToken + + err = app.mailer.Send(user.Email, data, "forgotten-password.tmpl") + if err != nil { + app.serverError(w, r, err) + return + } + + http.Redirect(w, r, "/forgotten-password-confirmation", http.StatusSeeOther) + } +} + +func (app *application) forgottenPasswordConfirmation(w http.ResponseWriter, r *http.Request) { + data := app.newTemplateData(r) + + err := response.Page(w, http.StatusOK, data, []string{"pages/forgotten-password-confirmation.tmpl"}, "full") + if err != nil { + app.serverError(w, r, err) + } +} + +func (app *application) passwordReset(w http.ResponseWriter, r *http.Request) { + plaintextToken := flow.Param(r.Context(), "plaintextToken") + + hashedToken := token.Hash(plaintextToken) + + passwordReset, found, err := app.db.GetPasswordReset(hashedToken) + if err != nil { + app.serverError(w, r, err) + return + } + + if !found { + data := app.newTemplateData(r) + data["InvalidLink"] = true + + err := response.Page(w, http.StatusUnprocessableEntity, data, []string{"pages/password-reset.tmpl"}, "full") + if err != nil { + app.serverError(w, r, err) + } + return + } + + var form struct { + NewPassword string `form:"NewPassword"` + Validator validator.Validator `form:"-"` + } + + switch r.Method { + case http.MethodGet: + data := app.newTemplateData(r) + data["Form"] = form + data["PlaintextToken"] = plaintextToken + + err := response.Page(w, http.StatusOK, data, []string{"pages/password-reset.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + + case http.MethodPost: + err := request.DecodePostForm(r, &form) + if err != nil { + app.badRequest(w, err) + return + } + + form.Validator.CheckField(form.NewPassword != "", "NewPassword", "New password is required") + form.Validator.CheckField(len(form.NewPassword) >= 8, "NewPassword", "New password is too short") + form.Validator.CheckField(len(form.NewPassword) <= 72, "NewPassword", "New password is too long") + form.Validator.CheckField(validator.NotIn(form.NewPassword, password.CommonPasswords...), "NewPassword", "New password is too common") + + if form.Validator.HasErrors() { + data := app.newTemplateData(r) + data["Form"] = form + data["PlaintextToken"] = plaintextToken + + err := response.Page(w, http.StatusUnprocessableEntity, data, []string{"pages/password-reset.tmpl"}, "full") + if err != nil { + app.serverError(w, r, err) + } + return + } + + hashedPassword, err := password.Hash(form.NewPassword) + if err != nil { + app.serverError(w, r, err) + return + } + + err = app.db.UpdateUserHashedPassword(passwordReset.UserID, hashedPassword) + if err != nil { + app.serverError(w, r, err) + return + } + + err = app.db.DeletePasswordResets(passwordReset.UserID) + if err != nil { + app.serverError(w, r, err) + return + } + + http.Redirect(w, r, "/password-reset-confirmation", http.StatusSeeOther) + } +} + +func (app *application) passwordResetConfirmation(w http.ResponseWriter, r *http.Request) { + data := app.newTemplateData(r) + + err := response.Page(w, http.StatusOK, data, []string{"pages/password-reset-confirmation.tmpl"}, "full") + if err != nil { + app.serverError(w, r, err) + } +} diff --git a/cmd/web/helpers.go b/cmd/web/helpers.go new file mode 100644 index 0000000..30789c3 --- /dev/null +++ b/cmd/web/helpers.go @@ -0,0 +1,63 @@ +package main + +import ( + "net/http" + + "brainminder.speedtech.it/internal/version" + "brainminder.speedtech.it/models" + "github.com/justinas/nosurf" +) + +func (app *application) newTemplateData(r *http.Request) map[string]any { + data := map[string]any{ + "AuthenticatedUser": contextGetAuthenticatedUser(r), + "CSRFToken": nosurf.Token(r), + "Version": version.Get(), + } + + typeModel := &models.TypeModel{DB: app.db} + + current_notebook_id := app.getCurrentNotebok_id(r) + criteria := map[string]any{ + "notebook_id": current_notebook_id, + } + + types, _, _ := typeModel.Find(criteria) + data["typesList"] = types + + notebookModel := &models.NotebookModel{DB: app.db} + data["notebooksList"] = notebookModel.AllAsOptions(true) + data["current_notebook_id"] = current_notebook_id + + return data +} + +func (app *application) newEmailData() map[string]any { + data := map[string]any{ + "BaseURL": app.config.baseURL, + } + + return data +} + +/* +func (app *application) backgroundTask(r *http.Request, fn func() error) { + app.wg.Add(1) + + go func() { + defer app.wg.Done() + + defer func() { + err := recover() + if err != nil { + app.reportServerError(r, fmt.Errorf("%s", err)) + } + }() + + err := fn() + if err != nil { + app.reportServerError(r, err) + } + }() +} +*/ diff --git a/cmd/web/items_handlers.go b/cmd/web/items_handlers.go new file mode 100644 index 0000000..b38b5ab --- /dev/null +++ b/cmd/web/items_handlers.go @@ -0,0 +1,918 @@ +package main + +import ( + "bytes" + "fmt" + "net/http" + "strconv" + "strings" + + "brainminder.speedtech.it/internal/request" + "brainminder.speedtech.it/internal/response" + "brainminder.speedtech.it/internal/validator" + "brainminder.speedtech.it/models" + "github.com/alexedwards/flow" +) + +type itemForm struct { + Id int64 `form:"Id"` + Type_id int64 `form:"Type_id"` + Title string `form:"Title"` + Summary string `form:"Summary"` + Description string `form:"Description"` + Notebooks []string `form:"Notebooks"` + Tags string `form:"Tags"` + On_dashboard int `form:"On_dashboard"` + Categories []string `form:"Categories"` + Type_icon string + Type_title string + Type_show_summary int + Type_show_description int + FieldsSection map[string][]models.Field + FieldsValues map[int64]map[int]string + Relations []models.ItemRelation + Validator validator.Validator `form:"-"` +} + +func (form *itemForm) Validate(w http.ResponseWriter, r *http.Request, app *application, data map[string]any) bool { + var fullBuf = new(bytes.Buffer) + + form.Validator.CheckField(form.Title != "", "Title", "Title is required") + //form.Validator.CheckField(form.Description != "", "Description", "Description is required") + + if form.Validator.HasErrors() { + w.Header().Add("HX-Retarget", "#message") + + data["messageType"] = "failure" + data["messageContent"] = "Impossible to save the item" + data["messageFieldErrors"] = form.Validator.FieldErrors + + err := response.HXFragment(fullBuf, []string{"partials/message.tmpl"}, "message", data) + if err != nil { + app.serverError(w, r, err) + } + fullBuf.WriteTo(w) + + w.WriteHeader(http.StatusUnprocessableEntity) + return false + } + + return true +} + +func (app *application) itemsRelationAdd(w http.ResponseWriter, r *http.Request) { + data := app.newTemplateData(r) + itemModel := models.NewItemModel(app.db) + categoryModel := &models.CategoryModel{DB: app.db} + var fullBuf = new(bytes.Buffer) + related_item_id, _ := strconv.ParseInt(flow.Param(r.Context(), "related_item_id"), 10, 64) + + relatedItem, _, _ := itemModel.One(related_item_id) + data["relatedItem"] = relatedItem + data["categoriesMap"] = categoryModel.AllAsMap() + + err := response.HXFragment(fullBuf, []string{"items/add_relation.tmpl"}, "item:add_relation", data) + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + w.WriteHeader(http.StatusOK) +} + +func (app *application) itemsSearch(w http.ResponseWriter, r *http.Request) { + data := app.newTemplateData(r) + itemModel := models.NewItemModel(app.db) + var fullBuf = new(bytes.Buffer) + + switch r.Method { + case http.MethodPost: + categoryModel := &models.CategoryModel{DB: app.db} + data["categoriesMap"] = categoryModel.AllAsMap() + + err := r.ParseForm() + if err != nil { + app.serverError(w, r, err) + return + } + + criteria := make(map[string]any) + criteria["notebook_id"] = app.getCurrentNotebok_id(r) + + rows, _, _ := itemModel.Search(r.PostForm.Get("SearchText"), criteria) + data["items"] = &rows + err = response.HXFragment(fullBuf, []string{"items/all_list.tmpl", "items/all_list_rows.tmpl", "items/add_to_dashboard.tmpl", "items/remove_from_dashboard.tmpl"}, "itemsAll:list", data) + if err != nil { + app.serverError(w, r, err) + } + + if r.Header.Get("HX-Target") == "page-content" { + err = response.HXFragmentOOB(fullBuf, []string{"items/all_list_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + } + + fullBuf.WriteTo(w) + } + w.WriteHeader(http.StatusOK) +} + +func (app *application) itemsSearchForRelations(w http.ResponseWriter, r *http.Request) { + + data := app.newTemplateData(r) + itemModel := models.NewItemModel(app.db) + var fullBuf = new(bytes.Buffer) + + categoryModel := &models.CategoryModel{DB: app.db} + data["categoriesMap"] = categoryModel.AllAsMap() + data["item_id"], _ = strconv.ParseInt(flow.Param(r.Context(), "item_id"), 10, 64) + + err := r.ParseForm() + if err != nil { + app.serverError(w, r, err) + return + } + + criteria := make(map[string]any) + criteria["notebook_id"] = app.getCurrentNotebok_id(r) + + rows, _, _ := itemModel.Search(r.Form.Get("SearchText"), criteria) + data["items"] = &rows + err = response.HXFragment(fullBuf, []string{"items/list_for_relations.tmpl"}, "items:list-for-relations", data) + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + w.WriteHeader(http.StatusOK) +} + +func (app *application) items(w http.ResponseWriter, r *http.Request) { + data := app.newTemplateData(r) + itemModel := models.NewItemModel(app.db) + var fullBuf = new(bytes.Buffer) + + categoryModel := &models.CategoryModel{DB: app.db} + data["categoriesMap"] = categoryModel.AllAsMap() + + params := r.URL.Query() + + offset_str := r.URL.Query().Get("offset") + if len(offset_str) == 0 { + offset_str = "0" + } + offset, _ := strconv.ParseInt(offset_str, 10, 64) + data["offset"] = offset + + switch r.Method { + case http.MethodGet: + + criteria := make(map[string]any) + + criteriaName := "itemsSearch" + data["criteriaName"] = criteriaName + + criteriaParam := r.URL.Query()["criteriaName"] + if len(criteriaParam) > 0 { + if criteriaParam[0] == criteriaName { + criteria_values := app.getSessionValue(w, r, criteriaName) + if criteria_values != nil { + criteria = criteria_values.(map[string]any) + } + } + } else { + app.removeSessionValue(w, r, criteriaName) + } + + criteria["notebook_id"] = app.getCurrentNotebok_id(r) + + rows, _, _ := itemModel.Find(criteria, offset) + + data["items"] = &rows + + if r.Header.Get("HX-Request") == "true" { + + out := params.Get("out") + + if out == "rows" { + err := response.HXFragment(fullBuf, []string{"items/all_list_rows.tmpl", "items/add_to_dashboard.tmpl", "items/remove_from_dashboard.tmpl"}, "itemsAll:list_rows", data) + if err != nil { + app.serverError(w, r, err) + } + } else { + err := response.HXFragment(fullBuf, []string{"items/all_list.tmpl", "items/all_list_rows.tmpl", "items/add_to_dashboard.tmpl", "items/remove_from_dashboard.tmpl"}, "itemsAll:list", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"items/all_list_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + } + + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"items/index_all.tmpl", "items/all_list.tmpl", "items/all_list_rows.tmpl", "items/add_to_dashboard.tmpl", "items/remove_from_dashboard.tmpl", "items/all_list_title.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + case http.MethodPost: + err := r.ParseForm() + if err != nil { + app.serverError(w, r, err) + return + } + + category_id, _ := strconv.ParseInt(r.PostForm.Get("category_id"), 10, 64) + criteria := map[string]any{ + "Title": r.PostForm.Get("Title"), + "Tags": r.PostForm.Get("Tags"), + "category_id": category_id, + } + + criteriaName := "itemsSearch" + data["criteriaName"] = criteriaName + app.saveSessionValue(w, r, criteriaName, criteria) + + rows, _, _ := itemModel.Find(criteria, offset) + data["items"] = &rows + err = response.HXFragment(fullBuf, []string{"items/all_list.tmpl", "items/all_list_rows.tmpl", "items/add_to_dashboard.tmpl", "items/remove_from_dashboard.tmpl"}, "itemsAll:list", data) + if err != nil { + app.serverError(w, r, err) + } + + if r.Header.Get("HX-Target") == "page-content" { + err = response.HXFragmentOOB(fullBuf, []string{"items/all_list_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + } + + fullBuf.WriteTo(w) + } + w.WriteHeader(http.StatusOK) +} + +func (app *application) itemsType(w http.ResponseWriter, r *http.Request) { + data := app.newTemplateData(r) + + type_id, _ := strconv.ParseInt(flow.Param(r.Context(), "type_id"), 10, 64) + + itemModel := models.NewItemModel(app.db) + typeModel := &models.TypeModel{DB: app.db} + aType, _, _ := typeModel.One(type_id) + fieldModel := &models.FieldModel{DB: app.db} + + fields, _, _ := fieldModel.ByTypeOnList(type_id) + data["type"] = &aType + data["Fields"] = fields + + categoryModel := &models.CategoryModel{DB: app.db} + data["categoriesMap"] = categoryModel.AllAsMap() + + params := r.URL.Query() + + offset_str := params.Get("offset") + if len(offset_str) == 0 { + offset_str = "0" + } + offset, _ := strconv.ParseInt(offset_str, 10, 64) + data["offset"] = offset + + var fullBuf = new(bytes.Buffer) + + switch r.Method { + case http.MethodGet: + + criteria := make(map[string]any) + + criteriaName := fmt.Sprintf("itemsTypeSearch_%d", type_id) + data["criteriaName"] = criteriaName + + criteriaParam := r.URL.Query()["criteriaName"] + if len(criteriaParam) > 0 { + if criteriaParam[0] == criteriaName { + criteria_values := app.getSessionValue(w, r, criteriaName) + if criteria_values != nil { + criteria = criteria_values.(map[string]any) + } + } + } else { + app.removeSessionValue(w, r, criteriaName) + } + + criteria["type_id"] = type_id + criteria["notebook_id"] = app.getCurrentNotebok_id(r) + + rows, _, _ := itemModel.Find(criteria, offset) + for i, row := range rows { + rows[i].FieldsValuesMap = fieldModel.GetFieldsValuesAsMap(row.Id) + } + + data["items"] = rows + + if r.Header.Get("HX-Request") == "true" { + out := params.Get("out") + + if out == "rows" { + err := response.HXFragment(fullBuf, []string{"items/list_rows.tmpl", "items/add_to_dashboard.tmpl", "items/remove_from_dashboard.tmpl"}, "items:list_rows", data) + if err != nil { + app.serverError(w, r, err) + } + } else { + err := response.HXFragment(fullBuf, []string{"items/list.tmpl", "items/list_rows.tmpl", "items/add_to_dashboard.tmpl", "items/remove_from_dashboard.tmpl"}, "items:list", data) + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteString("
    ") + err = response.HXFragmentOOB(fullBuf, []string{"items/list_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + } + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"items/index.tmpl", "items/list.tmpl", "items/list_rows.tmpl", "items/add_to_dashboard.tmpl", "items/remove_from_dashboard.tmpl", "items/list_title.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + case http.MethodPost: + err := r.ParseForm() + if err != nil { + app.serverError(w, r, err) + return + } + + category_id, _ := strconv.ParseInt(r.PostForm.Get("category_id"), 10, 64) + criteria := map[string]any{ + "Title": r.PostForm.Get("Title"), + "Tags": r.PostForm.Get("Tags"), + "category_id": category_id, + "type_id": type_id, + } + + criteriaName := fmt.Sprintf("itemsTypeSearch_%d", type_id) + data["criteriaName"] = criteriaName + app.saveSessionValue(w, r, criteriaName, criteria) + + rows, _, _ := itemModel.Find(criteria, offset) + for i, row := range rows { + rows[i].FieldsValuesMap = fieldModel.GetFieldsValuesAsMap(row.Id) + } + data["items"] = &rows + err = response.HXFragment(fullBuf, []string{"items/list.tmpl", "items/list_rows.tmpl", "items/add_to_dashboard.tmpl", "items/remove_from_dashboard.tmpl"}, "items:list", data) + if err != nil { + app.serverError(w, r, err) + } + fullBuf.WriteTo(w) + } + + w.WriteHeader(http.StatusOK) +} + +func (app *application) itemCreate(w http.ResponseWriter, r *http.Request) { + itemModel := models.NewItemModel(app.db) + fieldModel := &models.FieldModel{DB: app.db} + categoryModel := &models.CategoryModel{DB: app.db} + typeModel := &models.TypeModel{DB: app.db} + + type_id, _ := strconv.ParseInt(flow.Param(r.Context(), "type_id"), 10, 64) + + aType, _, _ := typeModel.One(type_id) + + data := app.newTemplateData(r) + data["type"] = aType + data["formAction"] = fmt.Sprint("/item/create/", type_id) + data["formTarget"] = "#page-content" + data["categories"] = categoryModel.AllAsOptions() + data["categoriesMap"] = categoryModel.AllAsMap() + + criteria := map[string]any{ + "notebook_id": app.getCurrentNotebok_id(r), + } + data["types"] = typeModel.FindAsOptions(criteria) + + notebookModel := &models.NotebookModel{DB: app.db} + data["notebooks"] = notebookModel.AllAsOptions(false) + + var fullBuf = new(bytes.Buffer) + var categories []string + + fieldsSection, _, _ := fieldModel.ByTypeSection(int64(type_id)) + fieldsValues := make(map[int64]map[int]string) + switch r.Method { + case http.MethodGet: + notebooks := []string{strconv.FormatInt(app.getCurrentNotebok_id(r), 10)} + + data["item"] = itemForm{ + Title: "", + Type_id: type_id, + Type_show_summary: aType.Show_summary, + Type_show_description: aType.Show_description, + Summary: "", + Description: "", + Tags: "", + FieldsSection: fieldsSection, + FieldsValues: fieldsValues, + Categories: categories, + Notebooks: notebooks, + Relations: nil, + } + + if r.Header.Get("HX-Request") == "true" { + + err := response.HXFragment(fullBuf, []string{"items/form.tmpl", "items/fields.tmpl", "items/relations.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"items/create_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + w.Header().Add("HX-Trigger-After-Settle", `{"activateEasyMDE":"item-description"}`) + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"items/create_title.tmpl", "items/relations.tmpl", "items/form.tmpl", "items/fields.tmpl", "items/form_jscode.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + + case http.MethodPost: + var itemFromForm itemForm + var item_id int64 + + err := request.DecodePostForm(r, &itemFromForm) + if err != nil { + app.serverError(w, r, err) + } + + if !itemFromForm.Validate(w, r, app, data) { + return + } + + item := &models.Item{ + Type_id: itemFromForm.Type_id, + Title: itemFromForm.Title, + Summary: itemFromForm.Summary, + Description: itemFromForm.Description, + Tags: itemFromForm.Tags, + On_dashboard: itemFromForm.On_dashboard, + } + + notebooks_str := strings.Join(itemFromForm.Notebooks, "|") + if len(notebooks_str) > 0 { + notebooks_str = "|" + notebooks_str + "|" + } + item.Notebooks = notebooks_str + + categories_str := strings.Join(itemFromForm.Categories, "|") + if len(categories_str) > 0 { + categories_str = "|" + categories_str + "|" + } + item.Categories = categories_str + + item_id, err = itemModel.Create(item) + item.Id = item_id + if err != nil { + app.badRequest(w, err) + return + } + + fieldsValues := make(map[int64]map[int]string) + for name, values := range r.PostForm { + id_s, found := strings.CutPrefix(name, "FieldsValues-") + if found { + parts := strings.Split(id_s, "-") + type_field_id, _ := strconv.ParseInt(parts[0], 10, 64) + counter, _ := strconv.Atoi(parts[1]) + + _, found_key := fieldsValues[type_field_id] + if !found_key { + fieldsValues[type_field_id] = make(map[int]string) + } + fieldsValues[type_field_id][counter] = values[0] + } + + related_id_s, found := strings.CutPrefix(name, "ItemRelation-New-") + if found && len(values) > 0 { + related_item_id, _ := strconv.ParseInt(related_id_s, 10, 64) + itemModel.AddRelation(item.Id, related_item_id, values[0]) + } + } + + for type_field_id, values := range fieldsValues { + fieldModel.SaveValues(item.Id, type_field_id, values) + } + + item.Type_title = aType.Title + fields, _, _ := fieldModel.ByType(int64(type_id)) + itemModel.SaveKeywords(item, &fields, fieldsValues) + + data["formAction"] = fmt.Sprint("/item/update/", item_id) + data["formTarget"] = "#message" + + notebooks := strings.Split(strings.Trim(item.Notebooks, "|"), "|") + categories := strings.Split(strings.Trim(item.Categories, "|"), "|") + relations, _, _ := itemModel.GetRelations(item.Id) + + data["item"] = itemForm{ + Id: item_id, + Type_id: type_id, + Type_show_summary: aType.Show_summary, + Type_show_description: aType.Show_description, + Title: item.Title, + Summary: item.Summary, + Description: item.Description, + Tags: item.Tags, + Type_icon: item.Type_icon, + Type_title: item.Type_title, + FieldsSection: fieldsSection, + FieldsValues: fieldsValues, + Notebooks: notebooks, + Categories: categories, + Relations: relations, + } + + err = response.HXFragment(fullBuf, []string{"items/form.tmpl", "items/fields.tmpl", "items/relations.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"items/update_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + dataMessage := make(map[string]string) + dataMessage["messageType"] = "success" + dataMessage["messageContent"] = "Item created successfully" + err = response.HXFragmentOOB(fullBuf, []string{"partials/message.tmpl"}, "message", dataMessage, "message") + if err != nil { + app.serverError(w, r, err) + } + + w.Header().Add("HX-Trigger-After-Settle", `{"activateEasyMDE":"item-description"}`) + w.Header().Add("HX-Replace-Url", fmt.Sprint("/item/update/", item_id)) + fullBuf.WriteTo(w) + + w.WriteHeader(http.StatusUnprocessableEntity) + } +} + +func (app *application) itemRead(w http.ResponseWriter, r *http.Request) { + data := app.newTemplateData(r) + item_id, _ := strconv.ParseInt(flow.Param(r.Context(), "item_id"), 10, 64) + itemModel := models.NewItemModel(app.db) + categoryModel := &models.CategoryModel{DB: app.db} + fieldModel := &models.FieldModel{DB: app.db} + relations, _, _ := itemModel.GetRelations(item_id) + + item, _, _ := itemModel.One(item_id) + + data["item"] = &item + data["relations"] = relations + data["categoriesMap"] = categoryModel.AllAsMap() + data["fields"] = fieldModel.GetFieldsValues(item_id) + + if r.Header.Get("HX-Request") == "true" { + var fullBuf = new(bytes.Buffer) + + err := response.HXFragment(fullBuf, []string{"items/read.tmpl", "items/relations_view.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"items/read_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"items/read_title.tmpl", "items/relations_view.tmpl", "items/read.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + + w.WriteHeader(http.StatusOK) +} + +func (app *application) itemView(w http.ResponseWriter, r *http.Request) { + data := app.newTemplateData(r) + item_id, _ := strconv.ParseInt(flow.Param(r.Context(), "item_id"), 10, 64) + itemModel := models.NewItemModel(app.db) + categoryModel := &models.CategoryModel{DB: app.db} + fieldModel := &models.FieldModel{DB: app.db} + + item, _, _ := itemModel.One(item_id) + relations, _, _ := itemModel.GetRelations(item_id) + + data["item"] = &item + data["relations"] = relations + data["categoriesMap"] = categoryModel.AllAsMap() + data["fields"] = fieldModel.GetFieldsValues(item_id) + + if r.Header.Get("HX-Request") == "true" { + var fullBuf = new(bytes.Buffer) + err := response.HXFragment(fullBuf, []string{"items/view.tmpl", "items/relations_view.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"items/read_title.tmpl", "items/relations_view.tmpl", "items/read.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + + } + + w.WriteHeader(http.StatusOK) +} + +func (app *application) itemUpdate(w http.ResponseWriter, r *http.Request) { + itemModel := models.NewItemModel(app.db) + fieldModel := &models.FieldModel{DB: app.db} + item_id_str := flow.Param(r.Context(), "item_id") + item_id, _ := strconv.ParseInt(flow.Param(r.Context(), "item_id"), 10, 64) + item, _, _ := itemModel.One(item_id) + fieldsSection, _, _ := fieldModel.ByTypeSection(item.Type_id) + fieldsValues := fieldModel.GetFieldsValuesAsMap(item.Id) + + data := app.newTemplateData(r) + data["formAction"] = "/item/update/" + item_id_str + data["formTarget"] = "#message" + + notebookModel := &models.NotebookModel{DB: app.db} + data["notebooks"] = notebookModel.AllAsOptions(false) + + categoryModel := &models.CategoryModel{DB: app.db} + data["categoriesMap"] = categoryModel.AllAsMap() + + var fullBuf = new(bytes.Buffer) + + switch r.Method { + case http.MethodGet: + + notebooks := strings.Split(strings.Trim(item.Notebooks, "|"), "|") + categories := strings.Split(strings.Trim(item.Categories, "|"), "|") + relations, _, _ := itemModel.GetRelations(item.Id) + + data["item"] = itemForm{ + Id: item.Id, + Type_id: item.Type_id, + Type_show_summary: item.Type_show_summary, + Type_show_description: item.Type_show_description, + Title: item.Title, + Summary: item.Summary, + Description: item.Description, + Tags: item.Tags, + On_dashboard: item.On_dashboard, + Type_icon: item.Type_icon, + Type_title: item.Type_title, + FieldsSection: fieldsSection, + FieldsValues: fieldsValues, + Categories: categories, + Notebooks: notebooks, + Relations: relations, + } + + data["categories"] = categoryModel.AllAsOptions() + + typeModel := &models.TypeModel{DB: app.db} + criteria := map[string]any{ + "notebook_id": app.getCurrentNotebok_id(r), + } + data["types"] = typeModel.FindAsOptions(criteria) + + if r.Header.Get("HX-Request") == "true" { + + err := response.HXFragment(fullBuf, []string{"items/form.tmpl", "items/fields.tmpl", "items/relations.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"items/update_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + w.Header().Add("HX-Trigger-After-Settle", `{"activateEasyMDE":"item-description"}`) + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"items/update_title.tmpl", "items/form.tmpl", "items/fields.tmpl", "items/relations.tmpl", "items/form_jscode.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + + case http.MethodPost: + var itemFromForm itemForm + + err := request.DecodePostForm(r, &itemFromForm) + if err != nil { + app.serverError(w, r, err) + } + + if !itemFromForm.Validate(w, r, app, data) { + return + } + + item.Title = itemFromForm.Title + item.Type_id = itemFromForm.Type_id + item.Summary = itemFromForm.Summary + item.Description = itemFromForm.Description + item.Tags = itemFromForm.Tags + item.On_dashboard = itemFromForm.On_dashboard + + notebooks_str := strings.Join(itemFromForm.Notebooks, "|") + if len(notebooks_str) > 0 { + notebooks_str = "|" + notebooks_str + "|" + } + item.Notebooks = notebooks_str + + categories_str := strings.Join(itemFromForm.Categories, "|") + if len(categories_str) > 0 { + categories_str = "|" + categories_str + "|" + } + item.Categories = categories_str + + err = itemModel.Update(item) + if err != nil { + app.badRequest(w, err) + return + } + + fieldsValues := make(map[int64]map[int]string) + for name, values := range r.PostForm { + id_s, found := strings.CutPrefix(name, "FieldsValues-") + if found { + parts := strings.Split(id_s, "-") + type_field_id, _ := strconv.ParseInt(parts[0], 10, 64) + counter, _ := strconv.Atoi(parts[1]) + + valuesRemove, isMapContainsKey := r.PostForm["FieldsValuesToRemove-"+id_s] + if !isMapContainsKey || valuesRemove[0] == "0" { + _, found_key := fieldsValues[type_field_id] + if !found_key { + fieldsValues[type_field_id] = make(map[int]string) + } + fieldsValues[type_field_id][counter] = values[0] + } + } + related_id_s, found := strings.CutPrefix(name, "ItemRelation-New-") + if found && len(values) > 0 { + related_item_id, _ := strconv.ParseInt(related_id_s, 10, 64) + itemModel.AddRelation(item.Id, related_item_id, values[0]) + } + + id_s, found = strings.CutPrefix(name, "ItemRelation-") + if found && len(values) > 0 { + ids := strings.Split(id_s, "-") + item_id, _ := strconv.ParseInt(ids[0], 10, 64) + related_item_id, _ := strconv.ParseInt(ids[1], 10, 64) + valuesRemove, isMapContainsKey := r.PostForm["ItemRelation-ToRemove-"+id_s] + if isMapContainsKey && valuesRemove[0] == "1" { + itemModel.DeleteRelation(item_id, related_item_id) + } else { + itemModel.UpdateRelation(item_id, related_item_id, values[0]) + } + } + } + + for type_field_id, values := range fieldsValues { + fieldModel.SaveValues(item.Id, type_field_id, values) + } + + fields, _, _ := fieldModel.ByType(item.Type_id) + itemModel.SaveKeywords(item, &fields, fieldsValues) + + relations, _, _ := itemModel.GetRelations(item.Id) + + data["item"] = itemForm{ + Title: item.Title, + Type_icon: item.Type_icon, + Type_title: item.Type_title, + Relations: relations, + } + + data["FieldsSection"] = fieldsSection + data["FieldsValues"] = fieldsValues + + dataMessage := make(map[string]string) + dataMessage["messageType"] = "success" + dataMessage["messageContent"] = "Item saved successfully" + err = response.HXFragment(fullBuf, []string{"partials/message.tmpl"}, "message", dataMessage) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"items/update_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"items/relations.tmpl"}, "item:relations", data, "relations") + if err != nil { + app.serverError(w, r, err) + } + + data["uisection"] = "general" + err = response.HXFragmentOOB(fullBuf, []string{"items/fields.tmpl"}, "items:fields", data, "fields-general") + if err != nil { + app.serverError(w, r, err) + } + + _, found := fieldsSection["fields"] + if found { + data["uisection"] = "fields" + err = response.HXFragmentOOB(fullBuf, []string{"items/fields.tmpl"}, "items:fields", data, "fields-fields") + if err != nil { + app.serverError(w, r, err) + } + } + + fullBuf.WriteTo(w) + + w.WriteHeader(http.StatusUnprocessableEntity) + } +} + +func (app *application) itemDelete(w http.ResponseWriter, r *http.Request) { + itemModel := models.NewItemModel(app.db) + item_id_str := flow.Param(r.Context(), "item_id") + item_id, _ := strconv.Atoi(item_id_str) + + _, err := itemModel.Delete(item_id) + if err != nil { + app.serverError(w, r, err) + } +} + +func (app *application) itemShare(w http.ResponseWriter, r *http.Request) { + itemModel := models.NewItemModel(app.db) + item_id, _ := strconv.ParseInt(flow.Param(r.Context(), "item_id"), 10, 64) + item, _, _ := itemModel.One(item_id) + var fullBuf = new(bytes.Buffer) + + data := app.newTemplateData(r) + data["item"] = item + data["baseUrl"] = app.config.baseURL + data["shareToken"] = app.generateSecureToken(18) + + err := response.HXFragment(fullBuf, []string{"items/share.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) +} + +func (app *application) itemAddToDashboard(w http.ResponseWriter, r *http.Request) { + itemModel := models.NewItemModel(app.db) + item_id, _ := strconv.ParseInt(flow.Param(r.Context(), "item_id"), 10, 64) + + err := itemModel.AddToDashboard(item_id) + if err != nil { + app.serverError(w, r, err) + } + + var fullBuf = new(bytes.Buffer) + + err = response.HXFragment(fullBuf, []string{"items/remove_from_dashboard.tmpl"}, "item:remove_from_dashboard", item_id) + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) +} + +func (app *application) itemRemoveFromDashboard(w http.ResponseWriter, r *http.Request) { + itemModel := models.NewItemModel(app.db) + item_id, _ := strconv.ParseInt(flow.Param(r.Context(), "item_id"), 10, 64) + + err := itemModel.RemoveFromDashboard(item_id) + if err != nil { + app.serverError(w, r, err) + } + + if r.Method == http.MethodPost { + var fullBuf = new(bytes.Buffer) + + err := response.HXFragment(fullBuf, []string{"items/add_to_dashboard.tmpl"}, "item:add_to_dashboard", item_id) + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + } +} diff --git a/cmd/web/main.go b/cmd/web/main.go new file mode 100644 index 0000000..ae688cc --- /dev/null +++ b/cmd/web/main.go @@ -0,0 +1,92 @@ +package main + +import ( + "encoding/gob" + "flag" + "fmt" + "log/slog" + "net/http" + "os" + "runtime/debug" + + "brainminder.speedtech.it/internal/database" + "brainminder.speedtech.it/internal/env" + "brainminder.speedtech.it/internal/smtp" + "brainminder.speedtech.it/internal/version" + + "github.com/gorilla/sessions" + "github.com/lmittmann/tint" +) + +func main() { + gob.Register(map[string]any{}) + logger := slog.New(tint.NewHandler(os.Stdout, &tint.Options{Level: slog.LevelDebug})) + + err := run(logger) + if err != nil { + trace := string(debug.Stack()) + logger.Error(err.Error(), "trace", trace) + os.Exit(1) + } +} + +func run(logger *slog.Logger) error { + var cfg config + + cfg.baseURL = env.GetString("BASE_URL", "http://localhost:4445") + cfg.httpPort = env.GetInt("HTTP_PORT", 4445) + cfg.cookie.secretKey = env.GetString("COOKIE_SECRET_KEY", `CHANGE_THIS_COOKIE_KEY`) + cfg.db.dsn = env.GetString("DB_DSN", "db.sqlite") + cfg.db.automigrate = env.GetBool("DB_AUTOMIGRATE", true) + cfg.session.secretKey = env.GetString("SESSION_SECRET_KEY", `CHANGE_THIS_SESSION_KEY`) + cfg.session.oldSecretKey = env.GetString("SESSION_OLD_SECRET_KEY", "") + cfg.smtp.host = env.GetString("SMTP_HOST", "example.smtp.host") + cfg.smtp.port = env.GetInt("SMTP_PORT", 25) + cfg.smtp.username = env.GetString("SMTP_USERNAME", "example_username") + cfg.smtp.password = env.GetString("SMTP_PASSWORD", "pa55word") + cfg.smtp.from = env.GetString("SMTP_FROM", "Example Name ") + + showVersion := flag.Bool("version", false, "display version and exit") + + flag.Parse() + + if *showVersion { + fmt.Printf("version: %s\n", version.Get()) + return nil + } + + db, err := database.New(cfg.db.dsn, cfg.db.automigrate) + if err != nil { + return err + } + defer db.Close() + + mailer, err := smtp.NewMailer(cfg.smtp.host, cfg.smtp.port, cfg.smtp.username, cfg.smtp.password, cfg.smtp.from) + if err != nil { + return err + } + + keyPairs := [][]byte{[]byte(cfg.session.secretKey), nil} + if cfg.session.oldSecretKey != "" { + keyPairs = append(keyPairs, []byte(cfg.session.oldSecretKey), nil) + } + + sessionStore := sessions.NewCookieStore(keyPairs...) + sessionStore.Options = &sessions.Options{ + HttpOnly: true, + MaxAge: 86400 * 7, + Path: "/", + SameSite: http.SameSiteLaxMode, + Secure: true, + } + + app := &application{ + config: cfg, + db: db, + logger: logger, + mailer: mailer, + sessionStore: sessionStore, + } + + return app.serveHTTP() +} diff --git a/cmd/web/middleware.go b/cmd/web/middleware.go new file mode 100644 index 0000000..ae9b99b --- /dev/null +++ b/cmd/web/middleware.go @@ -0,0 +1,138 @@ +package main + +import ( + "fmt" + "log/slog" + "net/http" + + "brainminder.speedtech.it/internal/response" + "github.com/justinas/nosurf" + "github.com/tomasen/realip" +) + +func (app *application) recoverPanic(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + defer func() { + err := recover() + if err != nil { + app.serverError(w, r, fmt.Errorf("%s", err)) + } + }() + + next.ServeHTTP(w, r) + }) +} + +func (app *application) securityHeaders(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + + w.Header().Set("Referrer-Policy", "origin-when-cross-origin") + w.Header().Set("X-Content-Type-Options", "nosniff") + w.Header().Set("X-Frame-Options", "deny") + w.Header().Set("Service-Worker-Allowed", "/") + + next.ServeHTTP(w, r) + }) +} + +func (app *application) logAccess(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + mw := response.NewMetricsResponseWriter(w) + next.ServeHTTP(mw, r) + + var ( + ip = realip.FromRequest(r) + method = r.Method + url = r.URL.String() + proto = r.Proto + ) + + userAttrs := slog.Group("user", "ip", ip) + requestAttrs := slog.Group("request", "method", method, "url", url, "proto", proto) + responseAttrs := slog.Group("response", "status", mw.StatusCode, "size", mw.BytesCount) + + app.logger.Info("access", userAttrs, requestAttrs, responseAttrs) + }) +} + +func (app *application) preventCSRF(next http.Handler) http.Handler { + csrfHandler := nosurf.New(next) + + csrfHandler.SetBaseCookie(http.Cookie{ + HttpOnly: true, + Path: "/", + MaxAge: 86400, + SameSite: http.SameSiteLaxMode, + Secure: true, + }) + + return csrfHandler +} + +func (app *application) authenticate(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + session, err := app.sessionStore.Get(r, "session") + if err != nil { + app.serverError(w, r, err) + return + } + + userID, ok := session.Values["userID"].(int) + if ok { + user, found, err := app.db.GetUser(userID) + if err != nil { + app.serverError(w, r, err) + return + } + + if found { + r = contextSetAuthenticatedUser(r, user) + } + } + + next.ServeHTTP(w, r) + }) +} + +func (app *application) requireAuthenticatedUser(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + authenticatedUser := contextGetAuthenticatedUser(r) + + if authenticatedUser == nil { + session, err := app.sessionStore.Get(r, "session") + if err != nil { + app.serverError(w, r, err) + return + } + + session.Values["redirectPathAfterLogin"] = r.URL.Path + + err = session.Save(r, w) + if err != nil { + app.serverError(w, r, err) + return + } + + http.Redirect(w, r, "/login", http.StatusSeeOther) + return + } + + w.Header().Add("Cache-Control", "no-store") + + next.ServeHTTP(w, r) + }) +} + +func (app *application) requireAnonymousUser(next http.Handler) http.Handler { + return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + authenticatedUser := contextGetAuthenticatedUser(r) + + if authenticatedUser != nil { + http.Redirect(w, r, "/", http.StatusSeeOther) + return + + } + + next.ServeHTTP(w, r) + }) +} diff --git a/cmd/web/notebooks_handlers.go b/cmd/web/notebooks_handlers.go new file mode 100644 index 0000000..c494194 --- /dev/null +++ b/cmd/web/notebooks_handlers.go @@ -0,0 +1,299 @@ +package main + +import ( + "bytes" + "fmt" + "net/http" + "strconv" + + "brainminder.speedtech.it/internal/request" + "brainminder.speedtech.it/internal/response" + "brainminder.speedtech.it/internal/validator" + "brainminder.speedtech.it/models" + "github.com/alexedwards/flow" +) + +type notebookForm struct { + Id int64 `form:"Id"` + Title string `form:"Title"` + Icon string `form:"Icon"` + Description string `form:"Description"` + Fields []models.Field + Widgets []models.Widget + Validator validator.Validator `form:"-"` +} + +func (form *notebookForm) Validate(w http.ResponseWriter, r *http.Request, app *application, data map[string]any) bool { + var fullBuf = new(bytes.Buffer) + + form.Validator.CheckField(form.Title != "", "Title", "Title is required") + form.Validator.CheckField(form.Description != "", "Description", "Description is required") + + if form.Validator.HasErrors() { + w.Header().Add("HX-Retarget", "#message") + + data["messageType"] = "failure" + data["messageContent"] = "Impossible to save the notebook" + data["messageFieldErrors"] = form.Validator.FieldErrors + + buf, err := response.Fragment([]string{"partials/message.tmpl"}, "message", data) + if err != nil { + app.serverError(w, r, err) + } + fullBuf.Write(buf.Bytes()) + + if err != nil { + app.serverError(w, r, err) + } + fullBuf.WriteTo(w) + + w.WriteHeader(http.StatusUnprocessableEntity) + return false + } + + return true +} + +func (app *application) notebooks(w http.ResponseWriter, r *http.Request) { + data := app.newTemplateData(r) + notebookModel := &models.NotebookModel{DB: app.db} + var fullBuf = new(bytes.Buffer) + + rows, _, _ := notebookModel.All() + data["notebooks"] = &rows + if r.Header.Get("HX-Request") == "true" { + + err := response.HXFragment(fullBuf, []string{"notebooks/list.tmpl"}, "notebooks:list", data) + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteString("
    ") + err = response.HXFragmentOOB(fullBuf, []string{"notebooks/list_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"notebooks/index.tmpl", "notebooks/list.tmpl", "notebooks/list_title.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + w.WriteHeader(http.StatusOK) + +} + +func (app *application) notebookCreate(w http.ResponseWriter, r *http.Request) { + notebookModel := &models.NotebookModel{DB: app.db} + var fullBuf = new(bytes.Buffer) + var notebook_id int64 + + data := app.newTemplateData(r) + data["formAction"] = "/notebook/create" + data["formTarget"] = "#page-content" + + switch r.Method { + case http.MethodGet: + + data["notebook"] = notebookForm{ + Title: "", + Icon: "", + Description: "", + } + + if r.Header.Get("HX-Request") == "true" { + err := response.HXFragment(fullBuf, []string{"notebooks/form.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteString("
    ") + err = response.HXFragmentOOB(fullBuf, []string{"notebooks/create_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"notebooks/create_title.tmpl", "notebooks/form.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + + case http.MethodPost: + var notebookFromForm notebookForm + + err := request.DecodePostForm(r, ¬ebookFromForm) + if err != nil { + app.serverError(w, r, err) + } + + if !notebookFromForm.Validate(w, r, app, data) { + return + } + + notebook := &models.Notebook{ + Title: notebookFromForm.Title, + Icon: notebookFromForm.Icon, + Description: notebookFromForm.Description, + } + + notebook_id, err = notebookModel.Create(notebook) + if err != nil { + app.badRequest(w, err) + return + } + + data["formAction"] = fmt.Sprint("/notebook/update/", notebook_id) + data["formTarget"] = "#message" + + data["notebook"] = notebookForm{ + Id: notebook_id, + Title: notebook.Title, + Icon: notebook.Icon, + Description: notebook.Description, + } + + err = response.HXFragment(fullBuf, []string{"notebooks/form.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"notebooks/update_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + notebookModel := &models.NotebookModel{DB: app.db} + data["notebooksList"] = notebookModel.AllAsOptions(true) + err = response.HXFragmentOOB(fullBuf, []string{"partials/notebooks-list.tmpl"}, "partial:notebooks-list", data, "current_notebook_id") + if err != nil { + app.serverError(w, r, err) + } + + dataMessage := make(map[string]string) + dataMessage["messageType"] = "success" + dataMessage["messageContent"] = "Notebook created successfully" + err = response.HXFragmentOOB(fullBuf, []string{"partials/message.tmpl"}, "message", dataMessage, "message") + if err != nil { + app.serverError(w, r, err) + } + + w.Header().Add("HX-Replace-Url", fmt.Sprint("/notebook/update/", notebook_id)) + fullBuf.WriteTo(w) + + w.WriteHeader(http.StatusUnprocessableEntity) + } +} + +func (app *application) notebookUpdate(w http.ResponseWriter, r *http.Request) { + notebookModel := &models.NotebookModel{DB: app.db} + notebook_id_str := flow.Param(r.Context(), "notebook_id") + notebook_id, _ := strconv.ParseInt(notebook_id_str, 10, 64) + notebook, _, _ := notebookModel.One(notebook_id) + + data := app.newTemplateData(r) + data["formAction"] = "/notebook/update/" + notebook_id_str + data["formTarget"] = "#message" + + var fullBuf = new(bytes.Buffer) + + switch r.Method { + case http.MethodGet: + + data["notebook"] = notebookForm{ + Id: notebook.Id, + Title: notebook.Title, + Icon: notebook.Icon, + Description: notebook.Description, + } + + if r.Header.Get("HX-Request") == "true" { + + err := response.HXFragment(fullBuf, []string{"notebooks/form.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"notebooks/update_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"notebooks/update_title.tmpl", "notebooks/form.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + + case http.MethodPost: + var notebookFromForm notebookForm + + err := request.DecodePostForm(r, ¬ebookFromForm) + if err != nil { + app.serverError(w, r, err) + } + + if !notebookFromForm.Validate(w, r, app, data) { + return + } + + notebook.Title = notebookFromForm.Title + notebook.Description = notebookFromForm.Description + notebook.Icon = notebookFromForm.Icon + + err = notebookModel.Update(notebook) + if err != nil { + app.badRequest(w, err) + return + } + + data["notebook"] = notebookForm{ + Id: notebook.Id, + Title: notebook.Title, + Icon: notebook.Icon, + Description: notebook.Description, + } + + dataMessage := make(map[string]string) + dataMessage["messageType"] = "success" + dataMessage["messageContent"] = "Notebook saved successfully" + err = response.HXFragment(fullBuf, []string{"partials/message.tmpl"}, "message", dataMessage) + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteString("
    ") + err = response.HXFragmentOOB(fullBuf, []string{"notebooks/update_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + notebookModel := &models.NotebookModel{DB: app.db} + data["notebooksList"] = notebookModel.AllAsOptions(true) + err = response.HXFragmentOOB(fullBuf, []string{"partials/notebooks-list.tmpl"}, "partial:notebooks-list", data, "current_notebook_id") + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + + w.WriteHeader(http.StatusUnprocessableEntity) + } +} + +func (app *application) notebookDelete(w http.ResponseWriter, r *http.Request) { + notebookModel := &models.NotebookModel{DB: app.db} + notebook_id_str := flow.Param(r.Context(), "notebook_id") + notebook_id, _ := strconv.ParseInt(notebook_id_str, 10, 64) + + _, err := notebookModel.Delete(notebook_id) + if err != nil { + app.serverError(w, r, err) + } +} diff --git a/cmd/web/quickbox_handlers.go b/cmd/web/quickbox_handlers.go new file mode 100644 index 0000000..e977c07 --- /dev/null +++ b/cmd/web/quickbox_handlers.go @@ -0,0 +1,301 @@ +package main + +import ( + "bytes" + "fmt" + "net/http" + "strconv" + "strings" + + "brainminder.speedtech.it/internal/request" + "brainminder.speedtech.it/internal/response" + "brainminder.speedtech.it/internal/validator" + "brainminder.speedtech.it/models" + "github.com/alexedwards/flow" +) + +type quicknoteForm struct { + Id int64 `form:"Id"` + Note string `form:"Note"` + Note_rendered string `form:"Note_rendered"` + Validator validator.Validator `form:"-"` +} + +type quicknoteTransformForm struct { + Title string `form:"Title"` + Type_id int64 `form:"Type_id"` + Description string `form:"Description"` + Tags string `form:"Tags"` + Categories []string `form:"Categories"` + Notebooks []string `form:"Notebooks"` + Keep_in_quickbox int `form:"Keep_in_quickbox"` +} + +func (app *application) quickboxAll(w http.ResponseWriter, r *http.Request) { + var fullBuf = new(bytes.Buffer) + + data := app.newTemplateData(r) + + quicknoteModel := &models.QuicknoteModel{BaseModel: &models.BaseModel{DB: app.db}} + + params := r.URL.Query() + offset_str := params.Get("offset") + var offset int64 = 0 + if len(offset_str) == 0 { + offset = 0 + } else { + offset, _ = strconv.ParseInt(offset_str, 10, 64) + } + data["offset"] = offset + + rows, _, _ := quicknoteModel.AllQB(offset) + data["quicknotes"] = rows + + err := response.HXFragment(fullBuf, []string{"quickbox/list.tmpl"}, "quickbox:list", data) + if err != nil { + app.serverError(w, r, err) + } + fullBuf.WriteTo(w) + w.WriteHeader(http.StatusOK) +} + +func (app *application) quickboxAdd(w http.ResponseWriter, r *http.Request) { + quicknoteModel := models.NewQuicknoteModel(app.db) + var fullBuf = new(bytes.Buffer) + var quicknote_id int64 + data := app.newTemplateData(r) + + var quicknoteFromForm quicknoteForm + + err := request.DecodePostForm(r, &quicknoteFromForm) + if err != nil { + app.serverError(w, r, err) + } + + quicknote := &models.Quicknote{ + Note: quicknoteFromForm.Note, + } + + quicknote_id, err = quicknoteModel.Create(quicknote) + if err != nil { + app.badRequest(w, err) + return + } + + data["quicknote"] = quicknoteForm{ + Id: quicknote_id, + Note: quicknote.Note, + Note_rendered: quicknote.Note_rendered, + } + + err = response.HXFragment(fullBuf, []string{"quickbox/add.tmpl"}, "quickbox:add", data) + if err != nil { + app.serverError(w, r, err) + return + } + + w.Header().Add("HX-Trigger", `{"quickboxNoteClear": ""}`) + + fullBuf.WriteTo(w) + w.WriteHeader(http.StatusUnprocessableEntity) +} + +func (app *application) quickboxTransform(w http.ResponseWriter, r *http.Request) { + quicknoteModel := models.NewQuicknoteModel(app.db) + quicknote_id_str := flow.Param(r.Context(), "quicknote_id") + quicknote_id, _ := strconv.ParseInt(quicknote_id_str, 10, 64) + quicknote, _, _ := quicknoteModel.One(quicknote_id) + + data := app.newTemplateData(r) + + var fullBuf = new(bytes.Buffer) + + switch r.Method { + case http.MethodGet: + + data["quicknote"] = quicknoteForm{ + Id: quicknote.Id, + Note: quicknote.Note, + } + + data["categories"] = app.getCategoriesAsOptions() + data["categoriesMap"] = app.getCategoriesAsMap() + data["types"] = app.getTypesAsOptions(r) + data["notebooks"] = app.getNotebooksAsOptions() + + err := response.HXFragment(fullBuf, []string{"quickbox/transform.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + + case http.MethodPost: + itemModel := models.NewItemModel(app.db) + var quicknoteTransformFromForm quicknoteTransformForm + + err := request.DecodePostForm(r, &quicknoteTransformFromForm) + if err != nil { + app.serverError(w, r, err) + } + + item := &models.Item{ + Type_id: quicknoteTransformFromForm.Type_id, + Title: quicknoteTransformFromForm.Title, + Description: quicknoteTransformFromForm.Description, + Tags: quicknoteTransformFromForm.Tags, + } + + notebooks_str := strings.Join(quicknoteTransformFromForm.Notebooks, "|") + if len(notebooks_str) > 0 { + notebooks_str = "|" + notebooks_str + "|" + } + item.Notebooks = notebooks_str + + categories_str := strings.Join(quicknoteTransformFromForm.Categories, "|") + if len(categories_str) > 0 { + categories_str = "|" + categories_str + "|" + } + item.Categories = categories_str + + item_id, err := itemModel.Create(item) + item.Id = item_id + + typeModel := &models.TypeModel{DB: app.db} + aType, _, _ := typeModel.One(item.Type_id) + item.Type_title = aType.Title + + fieldModel := &models.FieldModel{DB: app.db} + fields, _, _ := fieldModel.ByType(int64(item.Type_id)) + fieldsValues := make(map[int64]map[int]string) + + itemModel.SaveKeywords(item, &fields, fieldsValues) + + if err != nil { + app.badRequest(w, err) + return + } + + data["messageType"] = "success" + data["messageContent"] = "Quicknote transformed successfully" + err = response.HXFragment(fullBuf, []string{"partials/message.tmpl"}, "message", data) + if err != nil { + app.serverError(w, r, err) + } + + triggerResponse := fmt.Sprintf(`{"closeQuickboxTransformModal":{"quickNoteId": "%d", "keepQuickNote": "%d"}}`, quicknote_id, quicknoteTransformFromForm.Keep_in_quickbox) + w.Header().Add("HX-Trigger-After-Swap", triggerResponse) + fullBuf.WriteTo(w) + + w.WriteHeader(http.StatusUnprocessableEntity) + } +} + +func (app *application) quickboxUpdate(w http.ResponseWriter, r *http.Request) { + quicknoteModel := models.NewQuicknoteModel(app.db) + quicknote_id_str := flow.Param(r.Context(), "quicknote_id") + quicknote_id, _ := strconv.ParseInt(quicknote_id_str, 10, 64) + quicknote, _, _ := quicknoteModel.One(quicknote_id) + + data := app.newTemplateData(r) + data["formAction"] = "/quicknote/update/" + quicknote_id_str + data["formTarget"] = "#message" + data["messageType"] = "" + data["messageContent"] = "" + + var fullBuf = new(bytes.Buffer) + + switch r.Method { + case http.MethodGet: + + data["quicknote"] = quicknoteForm{ + Id: quicknote.Id, + Note: quicknote.Note, + } + + if r.Header.Get("HX-Request") == "true" { + + buf, err := response.Fragment([]string{"quicknotes/form.tmpl", "partials/message.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + fullBuf.Write(buf.Bytes()) + + fullBuf.WriteString("
    ") + buf, err = response.Fragment([]string{"quicknotes/update_title.tmpl"}, "page:title", data) + if err != nil { + app.serverError(w, r, err) + } + fullBuf.Write(buf.Bytes()) + fullBuf.WriteString("
    ") + + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"quicknotes/update_title.tmpl", "quicknotes/form.tmpl", "partials/message.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + + case http.MethodPost: + var quicknoteFromForm quicknoteForm + + err := request.DecodePostForm(r, &quicknoteFromForm) + if err != nil { + app.serverError(w, r, err) + } + + quicknote.Note = quicknoteFromForm.Note + + err = quicknoteModel.Update(quicknote) + if err != nil { + app.badRequest(w, err) + return + } + + data["quicknote"] = quicknoteForm{ + Id: quicknote.Id, + Note: quicknote.Note, + } + + data["messageType"] = "success" + data["messageContent"] = "Quicknote saved successfully" + + buf, err := response.Fragment([]string{"partials/message.tmpl"}, "message", data) + if err != nil { + app.serverError(w, r, err) + } + fullBuf.Write(buf.Bytes()) + + fullBuf.WriteString("
    ") + buf, err = response.Fragment([]string{"quicknotes/update_title.tmpl"}, "page:title", data) + if err != nil { + app.serverError(w, r, err) + } + fullBuf.Write(buf.Bytes()) + fullBuf.WriteString("
    ") + + fullBuf.WriteString("
    ") + buf, err = response.Fragment([]string{"partials/quicknotes-list.tmpl"}, "partial:quicknotes-list", data) + if err != nil { + app.serverError(w, r, err) + } + fullBuf.Write(buf.Bytes()) + fullBuf.WriteString("
    ") + + fullBuf.WriteTo(w) + + w.WriteHeader(http.StatusUnprocessableEntity) + } +} + +func (app *application) quickboxDelete(w http.ResponseWriter, r *http.Request) { + quicknoteModel := models.NewQuicknoteModel(app.db) + quicknote_id_str := flow.Param(r.Context(), "quicknote_id") + quicknote_id, _ := strconv.ParseInt(quicknote_id_str, 10, 64) + + _, err := quicknoteModel.Delete(quicknote_id) + if err != nil { + app.serverError(w, r, err) + } +} diff --git a/cmd/web/routes.go b/cmd/web/routes.go new file mode 100644 index 0000000..1f71a47 --- /dev/null +++ b/cmd/web/routes.go @@ -0,0 +1,84 @@ +package main + +import ( + "net/http" + + "brainminder.speedtech.it/assets" + + "github.com/alexedwards/flow" +) + +func (app *application) routes() http.Handler { + mux := flow.New() + mux.NotFound = http.HandlerFunc(app.notFound) + + mux.Use(app.logAccess) + mux.Use(app.recoverPanic) + mux.Use(app.securityHeaders) + + fileServer := http.FileServer(http.FS(assets.EmbeddedFiles)) + + mux.Handle("/static/...", fileServer, "GET") + + mux.Group(func(mux *flow.Mux) { + mux.Use(app.preventCSRF) + mux.Use(app.authenticate) + + mux.Group(func(mux *flow.Mux) { + mux.Use(app.requireAnonymousUser) + mux.HandleFunc("/login", app.login, "GET", "POST") + }) + + mux.Group(func(mux *flow.Mux) { + mux.Use(app.requireAuthenticatedUser) + mux.HandleFunc("/logout", app.logout, "POST", "GET") + // To move + mux.HandleFunc("/signup", app.signup, "GET", "POST") + mux.HandleFunc("/forgotten-password", app.forgottenPassword, "GET", "POST") + mux.HandleFunc("/forgotten-password-confirmation", app.forgottenPasswordConfirmation, "GET") + mux.HandleFunc("/password-reset/:plaintextToken", app.passwordReset, "GET", "POST") + mux.HandleFunc("/password-reset-confirmation", app.passwordResetConfirmation, "GET") + //End to move + + mux.HandleFunc("/", app.home, "GET", "POST") + mux.HandleFunc("/item/relation/add/:related_item_id", app.itemsRelationAdd, "GET") + mux.HandleFunc("/items", app.items, "GET", "POST") + mux.HandleFunc("/items/search", app.items, "GET") + mux.HandleFunc("/items/search", app.itemsSearch, "POST") + mux.HandleFunc("/items/search-for-relations/:item_id", app.itemsSearchForRelations, "GET") + mux.HandleFunc("/items/type/:type_id", app.itemsType, "GET", "POST") + mux.HandleFunc("/item/create/:type_id", app.itemCreate, "GET", "POST") + mux.HandleFunc("/item/read/:item_id", app.itemRead, "GET") + mux.HandleFunc("/item/view/:item_id", app.itemView, "GET") + mux.HandleFunc("/item/update/:item_id", app.itemUpdate, "GET", "POST") + mux.HandleFunc("/item/delete/:item_id", app.itemDelete, "DELETE") + mux.HandleFunc("/item/share/:item_id", app.itemShare, "GET", "POST") + mux.HandleFunc("/item/add-to-dashboard/:item_id", app.itemAddToDashboard, "POST") + mux.HandleFunc("/item/remove-from-dashboard/:item_id", app.itemRemoveFromDashboard, "POST", "DELETE") + + mux.HandleFunc("/types", app.types, "GET") + mux.HandleFunc("/type/create", app.typeCreate, "GET", "POST") + mux.HandleFunc("/type/update/:type_id", app.typeUpdate, "GET", "POST") + mux.HandleFunc("/type/delete/:type_id", app.typeDelete, "DELETE") + mux.HandleFunc("/type/field-new", app.typeFieldNew, "GET") + + mux.HandleFunc("/categories", app.categories, "GET") + mux.HandleFunc("/category/create", app.categoryCreate, "GET", "POST") + mux.HandleFunc("/category/update/:category_id", app.categoryUpdate, "GET", "POST") + mux.HandleFunc("/category/delete/:category_id", app.categoryDelete, "DELETE") + + mux.HandleFunc("/notebooks", app.notebooks, "GET") + mux.HandleFunc("/notebook/create", app.notebookCreate, "GET", "POST") + mux.HandleFunc("/notebook/update/:notebook_id", app.notebookUpdate, "GET", "POST") + mux.HandleFunc("/notebook/delete/:notebook_id", app.notebookDelete, "DELETE") + + mux.HandleFunc("/quickbox/update/:quicknote_id", app.quickboxUpdate, "GET", "POST") + mux.HandleFunc("/quickbox/delete/:quicknote_id", app.quickboxDelete, "DELETE") + mux.HandleFunc("/quickbox/transform/:quicknote_id", app.quickboxTransform, "GET", "POST") + mux.HandleFunc("/quickbox/add", app.quickboxAdd, "POST") + mux.HandleFunc("/quickbox/all", app.quickboxAll, "GET") + }) + }) + + return mux +} diff --git a/cmd/web/server.go b/cmd/web/server.go new file mode 100644 index 0000000..30b2b62 --- /dev/null +++ b/cmd/web/server.go @@ -0,0 +1,61 @@ +package main + +import ( + "context" + "errors" + "fmt" + "log/slog" + "net/http" + "os" + "os/signal" + "syscall" + "time" +) + +const ( + defaultIdleTimeout = time.Minute + defaultReadTimeout = 5 * time.Second + defaultWriteTimeout = 10 * time.Second + defaultShutdownPeriod = 30 * time.Second +) + +func (app *application) serveHTTP() error { + srv := &http.Server{ + Addr: fmt.Sprintf(":%d", app.config.httpPort), + Handler: app.routes(), + ErrorLog: slog.NewLogLogger(app.logger.Handler(), slog.LevelWarn), + IdleTimeout: defaultIdleTimeout, + ReadTimeout: defaultReadTimeout, + WriteTimeout: defaultWriteTimeout, + } + + shutdownErrorChan := make(chan error) + + go func() { + quitChan := make(chan os.Signal, 1) + signal.Notify(quitChan, syscall.SIGINT, syscall.SIGTERM) + <-quitChan + + ctx, cancel := context.WithTimeout(context.Background(), defaultShutdownPeriod) + defer cancel() + + shutdownErrorChan <- srv.Shutdown(ctx) + }() + + app.logger.Info("starting server", slog.Group("server", "addr", srv.Addr)) + + err := srv.ListenAndServe() + if !errors.Is(err, http.ErrServerClosed) { + return err + } + + err = <-shutdownErrorChan + if err != nil { + return err + } + + app.logger.Info("stopped server", slog.Group("server", "addr", srv.Addr)) + + app.wg.Wait() + return nil +} diff --git a/cmd/web/types_handlers.go b/cmd/web/types_handlers.go new file mode 100644 index 0000000..6d91390 --- /dev/null +++ b/cmd/web/types_handlers.go @@ -0,0 +1,431 @@ +package main + +import ( + "bytes" + "fmt" + "net/http" + "strconv" + "strings" + + "brainminder.speedtech.it/internal/funcs" + "brainminder.speedtech.it/internal/request" + "brainminder.speedtech.it/internal/response" + "brainminder.speedtech.it/internal/validator" + "brainminder.speedtech.it/models" + "github.com/alexedwards/flow" +) + +type typeForm struct { + Id int64 `form:"Id"` + Title string `form:"Title"` + Icon string `form:"Icon"` + Description string `form:"Description"` + Show_summary int `form:"Show_summary"` + Show_description int `form:"Show_description"` + Notebooks []string `form:"Notebooks"` + Fields []models.Field + Widgets []models.Widget + Validator validator.Validator `form:"-"` +} + +func (form *typeForm) Validate(w http.ResponseWriter, r *http.Request, app *application, data map[string]any) bool { + var fullBuf = new(bytes.Buffer) + + form.Validator.CheckField(form.Title != "", "Title", "Title is required") + form.Validator.CheckField(form.Description != "", "Description", "Description is required") + + if form.Validator.HasErrors() { + w.Header().Add("HX-Retarget", "#message") + + data["messageType"] = "failure" + data["messageContent"] = "Impossible to save the type" + data["messageFieldErrors"] = form.Validator.FieldErrors + + err := response.HXFragment(fullBuf, []string{"partials/message.tmpl"}, "message", data) + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + + w.WriteHeader(http.StatusUnprocessableEntity) + return false + } + + return true +} + +func (app *application) types(w http.ResponseWriter, r *http.Request) { + data := app.newTemplateData(r) + typeModel := &models.TypeModel{DB: app.db} + + var fullBuf = new(bytes.Buffer) + + criteria := map[string]any{} + rows, _, _ := typeModel.Find(criteria) + data["types"] = &rows + if r.Header.Get("HX-Request") == "true" { + + err := response.HXFragment(fullBuf, []string{"types/list.tmpl"}, "types:list", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"types/list_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"types/index.tmpl", "types/list.tmpl", "types/list_title.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + + w.WriteHeader(http.StatusOK) +} + +func (app *application) typeCreate(w http.ResponseWriter, r *http.Request) { + typeModel := &models.TypeModel{DB: app.db} + var fullBuf = new(bytes.Buffer) + var type_id int64 + + data := app.newTemplateData(r) + data["formAction"] = "/type/create" + data["formTarget"] = "#page-content" + + widgetModel := &models.WidgetModel{DB: app.db} + data["widgets"] = widgetModel.AllAsOptions() + data["uisections"] = widgetModel.UISections() + + notebookModel := &models.NotebookModel{DB: app.db} + data["notebooks"] = notebookModel.AllAsOptions(false) + + switch r.Method { + case http.MethodGet: + + notebooks := []string{strconv.FormatInt(app.getCurrentNotebok_id(r), 10)} + + data["type"] = typeForm{ + Title: "", + Icon: "", + Description: "", + Show_summary: 0, + Show_description: 0, + Notebooks: notebooks, + } + + if r.Header.Get("HX-Request") == "true" { + err := response.HXFragment(fullBuf, []string{"types/form.tmpl", "types/fields.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"types/create_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"types/create_title.tmpl", "types/fields.tmpl", "types/form.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + + case http.MethodPost: + var typeFromForm typeForm + + err := request.DecodePostForm(r, &typeFromForm) + if err != nil { + app.serverError(w, r, err) + } + + if !typeFromForm.Validate(w, r, app, data) { + return + } + + aType := &models.Type{ + Title: typeFromForm.Title, + Icon: typeFromForm.Icon, + Description: typeFromForm.Description, + Show_summary: int(typeFromForm.Show_summary), + Show_description: int(typeFromForm.Show_description), + } + notebooks_str := strings.Join(typeFromForm.Notebooks, "|") + if len(notebooks_str) > 0 { + notebooks_str = "|" + notebooks_str + "|" + } + aType.Notebooks = notebooks_str + + type_id, err = typeModel.Create(aType) + if err != nil { + app.badRequest(w, err) + return + } + + typeModel.AddFields(type_id, r) + + data["formAction"] = fmt.Sprint("/type/update/", type_id) + data["formTarget"] = "#message" + + fieldModel := &models.FieldModel{DB: app.db} + fields, _, _ := fieldModel.ByType(type_id) + + data["type"] = typeForm{ + Id: type_id, + Title: aType.Title, + Icon: aType.Icon, + Description: aType.Description, + Show_summary: aType.Show_summary, + Show_description: aType.Show_description, + Fields: fields, + Notebooks: typeFromForm.Notebooks, + } + + err = response.HXFragment(fullBuf, []string{"types/form.tmpl", "types/fields.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"types/update_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + criteria := map[string]any{ + "notebook_id": app.getCurrentNotebok_id(r), + } + types, _, _ := typeModel.Find(criteria) + data["typesList"] = types + err = response.HXFragmentOOB(fullBuf, []string{"partials/types-list.tmpl"}, "partial:types-list", data, "types-list") + if err != nil { + app.serverError(w, r, err) + } + + dataMessage := make(map[string]string) + dataMessage["messageType"] = "success" + dataMessage["messageContent"] = "Type created successfully" + err = response.HXFragmentOOB(fullBuf, []string{"partials/message.tmpl"}, "message", dataMessage, "message") + if err != nil { + app.serverError(w, r, err) + } + + w.Header().Add("HX-Replace-Url", fmt.Sprint("/type/update/", type_id)) + fullBuf.WriteTo(w) + + w.WriteHeader(http.StatusUnprocessableEntity) + } +} + +func (app *application) typeUpdate(w http.ResponseWriter, r *http.Request) { + typeModel := &models.TypeModel{DB: app.db} + fieldModel := &models.FieldModel{DB: app.db} + type_id_str := flow.Param(r.Context(), "type_id") + type_id, _ := strconv.ParseInt(type_id_str, 10, 64) + aType, _, _ := typeModel.One(type_id) + + data := app.newTemplateData(r) + data["formAction"] = "/type/update/" + type_id_str + data["formTarget"] = "#message" + data["messageType"] = "" + data["messageContent"] = "" + + widgetModel := &models.WidgetModel{DB: app.db} + data["widgets"] = widgetModel.AllAsOptions() + data["uisections"] = widgetModel.UISections() + + notebookModel := &models.NotebookModel{DB: app.db} + data["notebooks"] = notebookModel.AllAsOptions(false) + + var fullBuf = new(bytes.Buffer) + + switch r.Method { + case http.MethodGet: + + fields, _, _ := fieldModel.ByType(aType.Id) + + notebooks := strings.Split(strings.Trim(aType.Notebooks, "|"), "|") + + data["type"] = typeForm{ + Id: aType.Id, + Title: aType.Title, + Icon: aType.Icon, + Description: aType.Description, + Show_summary: aType.Show_summary, + Show_description: aType.Show_description, + Fields: fields, + Notebooks: notebooks, + } + + if r.Header.Get("HX-Request") == "true" { + + err := response.HXFragment(fullBuf, []string{"types/form.tmpl", "types/fields.tmpl"}, "page:content", data) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"types/update_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + } else { + err := response.Page(w, http.StatusOK, data, []string{"types/update_title.tmpl", "types/form.tmpl", "types/fields.tmpl"}) + if err != nil { + app.serverError(w, r, err) + } + } + + case http.MethodPost: + var typeFromForm typeForm + + err := request.DecodePostForm(r, &typeFromForm) + if err != nil { + app.serverError(w, r, err) + } + + if !typeFromForm.Validate(w, r, app, data) { + return + } + + aType.Title = typeFromForm.Title + aType.Description = typeFromForm.Description + aType.Icon = typeFromForm.Icon + aType.Show_summary = typeFromForm.Show_summary + aType.Show_description = typeFromForm.Show_description + notebooks_str := strings.Join(typeFromForm.Notebooks, "|") + if len(notebooks_str) > 0 { + notebooks_str = "|" + notebooks_str + "|" + } + aType.Notebooks = notebooks_str + + err = typeModel.Update(aType) + if err != nil { + app.badRequest(w, err) + return + } + + fieldsUpdate := make(map[int64]models.Field) + for name, values := range r.PostForm { + s, found := strings.CutPrefix(name, "Fields-") + if found { + parts := strings.Split(s, "-") + if len(parts) == 2 { + type_field_id, _ := strconv.ParseInt(parts[0], 10, 64) + type_field_attribute := parts[1] + + field, found := fieldsUpdate[type_field_id] + if !found { + field := &models.Field{Type_field_id: type_field_id} + fieldsUpdate[type_field_id] = *field + } + field = fieldsUpdate[type_field_id] + + switch type_field_attribute { + case "Widget_id": + field.Widget_id, _ = strconv.ParseInt(values[0], 10, 64) + case "Title": + field.Title = values[0] + case "Valid_values": + field.Valid_values = values[0] + case "Ui_section": + field.Ui_section = values[0] + case "Show_on_list": + field.Show_on_list, _ = strconv.ParseInt(values[0], 10, 64) + case "Show_on_view": + field.Show_on_view, _ = strconv.ParseInt(values[0], 10, 64) + case "Is_multiple": + field.Is_multiple, _ = strconv.ParseInt(values[0], 10, 64) + case "ToRemove": + field.ToRemove, _ = strconv.ParseInt(values[0], 10, 64) + } + fieldsUpdate[type_field_id] = field + } + } + } + + for id, field := range fieldsUpdate { + if field.ToRemove > 0 { + typeModel.RemoveField(id) + } else { + typeModel.SaveField(id, &field) + } + } + + typeModel.AddFields(type_id, r) + + data["type"] = typeForm{ + Id: aType.Id, + Title: aType.Title, + Icon: aType.Icon, + Description: aType.Description, + Show_summary: aType.Show_summary, + Show_description: aType.Show_description, + } + + dataMessage := make(map[string]string) + dataMessage["messageType"] = "success" + dataMessage["messageContent"] = "Type saved succesfully" + err = response.HXFragment(fullBuf, []string{"partials/message.tmpl"}, "message", dataMessage) + if err != nil { + app.serverError(w, r, err) + } + + err = response.HXFragmentOOB(fullBuf, []string{"types/update_title.tmpl"}, "page:title", data, "page-title") + if err != nil { + app.serverError(w, r, err) + } + + fieldData := make(map[string]any) + fields, _, _ := fieldModel.ByType(aType.Id) + + fieldData["fields"] = fields + fieldData["widgets"] = data["widgets"] + fieldData["uisections"] = widgetModel.UISections() + + err = response.HXFragmentOOB(fullBuf, []string{"types/fields.tmpl"}, "types:fields", fieldData, "fields-list") + if err != nil { + app.serverError(w, r, err) + } + + fullBuf.WriteTo(w) + + w.WriteHeader(http.StatusUnprocessableEntity) + } +} + +func (app *application) typeFieldNew(w http.ResponseWriter, r *http.Request) { + data := app.newTemplateData(r) + + data["counter"] = r.URL.Query()["counter"][0] + widgetModel := &models.WidgetModel{DB: app.db} + widgets, _, _ := widgetModel.All() + var selectOptions []funcs.WidgetOption + for _, widget := range widgets { + selectOptions = append(selectOptions, funcs.WidgetOption{Key: strconv.FormatInt(widget.Id, 10), Value: widget.Name}) + } + data["widgets"] = selectOptions + data["uisections"] = widgetModel.UISections() + + buf, err := response.Fragment([]string{"types/field_new.tmpl"}, "type:field_new", data) + if err != nil { + app.serverError(w, r, err) + } + buf.WriteTo(w) +} + +func (app *application) typeDelete(w http.ResponseWriter, r *http.Request) { + typeModel := &models.TypeModel{DB: app.db} + item_id_str := flow.Param(r.Context(), "type_id") + item_id, _ := strconv.Atoi(item_id_str) + + _, err := typeModel.Delete(item_id) + if err != nil { + app.serverError(w, r, err) + } +} diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..f7a4c39 --- /dev/null +++ b/go.mod @@ -0,0 +1,32 @@ +module brainminder.speedtech.it + +go 1.23 + +toolchain go1.23.0 + +require ( + github.com/alexedwards/flow v0.1.0 + github.com/go-playground/form/v4 v4.2.1 + github.com/golang-migrate/migrate/v4 v4.17.1 + github.com/gorilla/sessions v1.4.0 + github.com/jmoiron/sqlx v1.4.0 + github.com/justinas/nosurf v1.1.1 + github.com/lmittmann/tint v1.0.5 + github.com/mattn/go-sqlite3 v1.14.22 + github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce + github.com/wneessen/go-mail v0.4.3 + github.com/yuin/goldmark v1.7.4 + github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594 + golang.org/x/crypto v0.26.0 + golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa + golang.org/x/text v0.17.0 +) + +require ( + github.com/alecthomas/chroma v0.10.0 // indirect + github.com/dlclark/regexp2 v1.4.0 // indirect + github.com/gorilla/securecookie v1.1.2 // indirect + github.com/hashicorp/errwrap v1.1.0 // indirect + github.com/hashicorp/go-multierror v1.1.1 // indirect + go.uber.org/atomic v1.7.0 // indirect +) diff --git a/go.sum b/go.sum new file mode 100644 index 0000000..3855de2 --- /dev/null +++ b/go.sum @@ -0,0 +1,68 @@ +filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA= +filippo.io/edwards25519 v1.1.0/go.mod h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4= +github.com/alecthomas/chroma v0.10.0 h1:7XDcGkCQopCNKjZHfYrNLraA+M7e0fMiJ/Mfikbfjek= +github.com/alecthomas/chroma v0.10.0/go.mod h1:jtJATyUxlIORhUOFNA9NZDWGAQ8wpxQQqNSB4rjA/1s= +github.com/alexedwards/flow v0.1.0 h1:2JY6lesAFIxB5uEcm4coM6FM8tLNGZovVXqRRTic8a4= +github.com/alexedwards/flow v0.1.0/go.mod h1:RtjEm3RTnsKqwE98bem/60/9cxEyZ0AQEz8GUZ0X+Ww= +github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= +github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= +github.com/dlclark/regexp2 v1.4.0 h1:F1rxgk7p4uKjwIQxBs9oAXe5CqrXlCduYEJvrF4u93E= +github.com/dlclark/regexp2 v1.4.0/go.mod h1:2pZnwuY/m+8K6iRw6wQdMtk+rH5tNGR1i55kozfMjCc= +github.com/go-playground/assert/v2 v2.0.1 h1:MsBgLAaY856+nPRTKrp3/OZK38U/wa0CcBYNjji3q3A= +github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= +github.com/go-playground/form/v4 v4.2.1 h1:HjdRDKO0fftVMU5epjPW2SOREcZ6/wLUzEobqUGJuPw= +github.com/go-playground/form/v4 v4.2.1/go.mod h1:q1a2BY+AQUUzhl6xA/6hBetay6dEIhMHjgvJiGo6K7U= +github.com/go-sql-driver/mysql v1.8.1 h1:LedoTUt/eveggdHS9qUFC1EFSa8bU2+1pZjSRpvNJ1Y= +github.com/go-sql-driver/mysql v1.8.1/go.mod h1:wEBSXgmK//2ZFJyE+qWnIsVGmvmEKlqwuVSjsCm7DZg= +github.com/golang-migrate/migrate/v4 v4.17.1 h1:4zQ6iqL6t6AiItphxJctQb3cFqWiSpMnX7wLTPnnYO4= +github.com/golang-migrate/migrate/v4 v4.17.1/go.mod h1:m8hinFyWBn0SA4QKHuKh175Pm9wjmxj3S2Mia7dbXzM= +github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= +github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= +github.com/gorilla/securecookie v1.1.2 h1:YCIWL56dvtr73r6715mJs5ZvhtnY73hBvEF8kXD8ePA= +github.com/gorilla/securecookie v1.1.2/go.mod h1:NfCASbcHqRSY+3a8tlWJwsQap2VX5pwzwo4h3eOamfo= +github.com/gorilla/sessions v1.4.0 h1:kpIYOp/oi6MG/p5PgxApU8srsSw9tuFbt46Lt7auzqQ= +github.com/gorilla/sessions v1.4.0/go.mod h1:FLWm50oby91+hl7p/wRxDth9bWSuk0qVL2emc7lT5ik= +github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= +github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= +github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= +github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= +github.com/jmoiron/sqlx v1.4.0 h1:1PLqN7S1UYp5t4SrVVnt4nUVNemrDAtxlulVe+Qgm3o= +github.com/jmoiron/sqlx v1.4.0/go.mod h1:ZrZ7UsYB/weZdl2Bxg6jCRO9c3YHl8r3ahlKmRT4JLY= +github.com/justinas/nosurf v1.1.1 h1:92Aw44hjSK4MxJeMSyDa7jwuI9GR2J/JCQiaKvXXSlk= +github.com/justinas/nosurf v1.1.1/go.mod h1:ALpWdSbuNGy2lZWtyXdjkYv4edL23oSEgfBT1gPJ5BQ= +github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= +github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= +github.com/lmittmann/tint v1.0.5 h1:NQclAutOfYsqs2F1Lenue6OoWCajs5wJcP3DfWVpePw= +github.com/lmittmann/tint v1.0.5/go.mod h1:HIS3gSy7qNwGCj+5oRjAutErFBl4BzdQP6cJZ0NfMwE= +github.com/mattn/go-sqlite3 v1.14.22 h1:2gZY6PC6kBnID23Tichd1K+Z0oS6nE/XwU+Vz/5o4kU= +github.com/mattn/go-sqlite3 v1.14.22/go.mod h1:Uh1q+B4BYcTPb+yiD3kU8Ct7aC0hY9fxUwlHK0RXw+Y= +github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= +github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= +github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= +github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= +github.com/stretchr/testify v1.8.3 h1:RP3t2pwF7cMEbC1dqtB6poj3niw/9gnV4Cjg5oW5gtY= +github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= +github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce h1:fb190+cK2Xz/dvi9Hv8eCYJYvIGUTN2/KLq1pT6CjEc= +github.com/tomasen/realip v0.0.0-20180522021738-f0c99a92ddce/go.mod h1:o8v6yHRoik09Xen7gje4m9ERNah1d1PPsVq1VEx9vE4= +github.com/wneessen/go-mail v0.4.3 h1:FN4Ge0lpPxKkXuw4PgJSffXlruDdMo25bamfkMzm+FE= +github.com/wneessen/go-mail v0.4.3/go.mod h1:zxOlafWCP/r6FEhAaRgH4IC1vg2YXxO0Nar9u0IScZ8= +github.com/yuin/goldmark v1.4.5/go.mod h1:rmuwmfZ0+bvzB24eSC//bk1R1Zp3hM0OXYv/G2LIilg= +github.com/yuin/goldmark v1.7.4 h1:BDXOHExt+A7gwPCJgPIIq7ENvceR7we7rOS9TNoLZeg= +github.com/yuin/goldmark v1.7.4/go.mod h1:uzxRWxtg69N339t3louHJ7+O03ezfj6PlliRlaOzY1E= +github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594 h1:yHfZyN55+5dp1wG7wDKv8HQ044moxkyGq12KFFMFDxg= +github.com/yuin/goldmark-highlighting v0.0.0-20220208100518-594be1970594/go.mod h1:U9ihbh+1ZN7fR5Se3daSPoz1CGF9IYtSvWwVQtnzGHU= +go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw= +go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= +golang.org/x/crypto v0.26.0 h1:RrRspgV4mU+YwB4FYnuBoKsUapNIL5cohGAmSH3azsw= +golang.org/x/crypto v0.26.0/go.mod h1:GY7jblb9wI+FOo5y8/S2oY4zWP07AkOJ4+jxCqdqn54= +golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI= +golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ= +golang.org/x/text v0.17.0 h1:XtiM5bkSOt+ewxlOE/aE/AKEHibwj/6gvWMl9Rsh0Qc= +golang.org/x/text v0.17.0/go.mod h1:BuEKDfySbSR4drPmRPG/7iBdf8hvFMuRexcpahXilzY= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= +gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= +gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= +gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= diff --git a/internal/cookies/cookies.go b/internal/cookies/cookies.go new file mode 100644 index 0000000..1b1a2c9 --- /dev/null +++ b/internal/cookies/cookies.go @@ -0,0 +1,150 @@ +package cookies + +import ( + "crypto/aes" + "crypto/cipher" + "crypto/hmac" + "crypto/rand" + "crypto/sha256" + "encoding/base64" + "errors" + "fmt" + "io" + "net/http" + "strings" +) + +var ( + ErrValueTooLong = errors.New("cookie value too long") + ErrInvalidValue = errors.New("invalid cookie value") +) + +func Write(w http.ResponseWriter, cookie http.Cookie) error { + cookie.Value = base64.URLEncoding.EncodeToString([]byte(cookie.Value)) + + if len(cookie.String()) > 4096 { + return ErrValueTooLong + } + + http.SetCookie(w, &cookie) + + return nil +} + +func Read(r *http.Request, name string) (string, error) { + cookie, err := r.Cookie(name) + if err != nil { + return "", err + } + + value, err := base64.URLEncoding.DecodeString(cookie.Value) + if err != nil { + return "", ErrInvalidValue + } + + return string(value), nil +} + +func WriteSigned(w http.ResponseWriter, cookie http.Cookie, secretKey string) error { + mac := hmac.New(sha256.New, []byte(secretKey)) + mac.Write([]byte(cookie.Name)) + mac.Write([]byte(cookie.Value)) + signature := mac.Sum(nil) + + cookie.Value = string(signature) + cookie.Value + + return Write(w, cookie) +} + +func ReadSigned(r *http.Request, name string, secretKey string) (string, error) { + signedValue, err := Read(r, name) + if err != nil { + return "", err + } + + if len(signedValue) < sha256.Size { + return "", ErrInvalidValue + } + + signature := signedValue[:sha256.Size] + value := signedValue[sha256.Size:] + + mac := hmac.New(sha256.New, []byte(secretKey)) + mac.Write([]byte(name)) + mac.Write([]byte(value)) + expectedSignature := mac.Sum(nil) + + if !hmac.Equal([]byte(signature), expectedSignature) { + return "", ErrInvalidValue + } + + return value, nil +} + +func WriteEncrypted(w http.ResponseWriter, cookie http.Cookie, secretKey string) error { + block, err := aes.NewCipher([]byte(secretKey)) + if err != nil { + return err + } + + aesGCM, err := cipher.NewGCM(block) + if err != nil { + return err + } + + nonce := make([]byte, aesGCM.NonceSize()) + _, err = io.ReadFull(rand.Reader, nonce) + if err != nil { + return err + } + + plaintext := fmt.Sprintf("%s:%s", cookie.Name, cookie.Value) + + encryptedValue := aesGCM.Seal(nonce, nonce, []byte(plaintext), nil) + + cookie.Value = string(encryptedValue) + + return Write(w, cookie) +} + +func ReadEncrypted(r *http.Request, name string, secretKey string) (string, error) { + encryptedValue, err := Read(r, name) + if err != nil { + return "", err + } + + block, err := aes.NewCipher([]byte(secretKey)) + if err != nil { + return "", err + } + + aesGCM, err := cipher.NewGCM(block) + if err != nil { + return "", err + } + + nonceSize := aesGCM.NonceSize() + + if len(encryptedValue) < nonceSize { + return "", ErrInvalidValue + } + + nonce := encryptedValue[:nonceSize] + ciphertext := encryptedValue[nonceSize:] + + plaintext, err := aesGCM.Open(nil, []byte(nonce), []byte(ciphertext), nil) + if err != nil { + return "", ErrInvalidValue + } + + expectedName, value, ok := strings.Cut(string(plaintext), ":") + if !ok { + return "", ErrInvalidValue + } + + if expectedName != name { + return "", ErrInvalidValue + } + + return value, nil +} diff --git a/internal/database/db.go b/internal/database/db.go new file mode 100644 index 0000000..b347213 --- /dev/null +++ b/internal/database/db.go @@ -0,0 +1,63 @@ +package database + +import ( + "context" + "errors" + "time" + + "brainminder.speedtech.it/assets" + + "github.com/golang-migrate/migrate/v4" + "github.com/golang-migrate/migrate/v4/source/iofs" + "github.com/jmoiron/sqlx" + + _ "github.com/golang-migrate/migrate/v4/database/sqlite3" + _ "github.com/mattn/go-sqlite3" +) + +const defaultTimeout = 3 * time.Second + +type DB struct { + *sqlx.DB +} + +func GetContext() (context.Context, context.CancelFunc) { + return context.WithTimeout(context.Background(), defaultTimeout) +} + +func New(dsn string, automigrate bool) (*DB, error) { + ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + + db, err := sqlx.ConnectContext(ctx, "sqlite3", dsn) + if err != nil { + return nil, err + } + + db.SetMaxOpenConns(25) + db.SetMaxIdleConns(25) + db.SetConnMaxIdleTime(5 * time.Minute) + db.SetConnMaxLifetime(2 * time.Hour) + + if automigrate { + iofsDriver, err := iofs.New(assets.EmbeddedFiles, "migrations") + if err != nil { + return nil, err + } + + migrator, err := migrate.NewWithSourceInstance("iofs", iofsDriver, "sqlite3://"+dsn) + if err != nil { + return nil, err + } + + err = migrator.Up() + switch { + case errors.Is(err, migrate.ErrNoChange): + break + case err != nil: + return nil, err + } + } + + return &DB{db}, nil +} diff --git a/internal/database/password_resets.go b/internal/database/password_resets.go new file mode 100644 index 0000000..9ece244 --- /dev/null +++ b/internal/database/password_resets.go @@ -0,0 +1,54 @@ +package database + +import ( + "context" + "database/sql" + "errors" + "time" +) + +type PasswordReset struct { + HashedToken string `db:"hashed_token"` + UserID int `db:"user_id"` + Expiry time.Time `db:"expiry"` +} + +func (db *DB) InsertPasswordReset(hashedToken string, userID int, ttl time.Duration) error { + ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + + query := ` + INSERT INTO password_resets (hashed_token, user_id, expiry) + VALUES ($1, $2, $3)` + + _, err := db.ExecContext(ctx, query, hashedToken, userID, time.Now().Add(ttl)) + return err +} + +func (db *DB) GetPasswordReset(hashedToken string) (*PasswordReset, bool, error) { + ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + + var passwordReset PasswordReset + + query := ` + SELECT * FROM password_resets + WHERE hashed_token = $1 AND expiry > $2` + + err := db.GetContext(ctx, &passwordReset, query, hashedToken, time.Now()) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return &passwordReset, true, err +} + +func (db *DB) DeletePasswordResets(userID int) error { + ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + + query := `DELETE FROM password_resets WHERE user_id = $1` + + _, err := db.ExecContext(ctx, query, userID) + return err +} diff --git a/internal/database/users.go b/internal/database/users.go new file mode 100644 index 0000000..3c4f7de --- /dev/null +++ b/internal/database/users.go @@ -0,0 +1,79 @@ +package database + +import ( + "context" + "database/sql" + "errors" + "time" +) + +type User struct { + ID int `db:"id"` + Created time.Time `db:"created"` + Email string `db:"email"` + Roles string `db:"roles"` + HashedPassword string `db:"hashed_password"` +} + +func (db *DB) InsertUser(email, hashedPassword string) (int, error) { + ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + + query := ` + INSERT INTO users (created, email, hashed_password) + VALUES ($1, $2, $3)` + + result, err := db.ExecContext(ctx, query, time.Now(), email, hashedPassword) + if err != nil { + return 0, err + } + + id, err := result.LastInsertId() + if err != nil { + return 0, err + } + + return int(id), err +} + +func (db *DB) GetUser(id int) (*User, bool, error) { + ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + + var user User + + query := `SELECT * FROM users WHERE id = $1` + + err := db.GetContext(ctx, &user, query, id) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return &user, true, err +} + +func (db *DB) GetUserByEmail(email string) (*User, bool, error) { + ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + + var user User + + query := `SELECT * FROM users WHERE email = $1` + + err := db.GetContext(ctx, &user, query, email) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return &user, true, err +} + +func (db *DB) UpdateUserHashedPassword(id int, hashedPassword string) error { + ctx, cancel := context.WithTimeout(context.Background(), defaultTimeout) + defer cancel() + + query := `UPDATE users SET hashed_password = $1 WHERE id = $2` + + _, err := db.ExecContext(ctx, query, hashedPassword, id) + return err +} diff --git a/internal/env/env.go b/internal/env/env.go new file mode 100644 index 0000000..d25a2e2 --- /dev/null +++ b/internal/env/env.go @@ -0,0 +1,43 @@ +package env + +import ( + "os" + "strconv" +) + +func GetString(key, defaultValue string) string { + value, exists := os.LookupEnv(key) + if !exists { + return defaultValue + } + + return value +} + +func GetInt(key string, defaultValue int) int { + value, exists := os.LookupEnv(key) + if !exists { + return defaultValue + } + + intValue, err := strconv.Atoi(value) + if err != nil { + panic(err) + } + + return intValue +} + +func GetBool(key string, defaultValue bool) bool { + value, exists := os.LookupEnv(key) + if !exists { + return defaultValue + } + + boolValue, err := strconv.ParseBool(value) + if err != nil { + panic(err) + } + + return boolValue +} diff --git a/internal/funcs/funcs.go b/internal/funcs/funcs.go new file mode 100644 index 0000000..4f9bba4 --- /dev/null +++ b/internal/funcs/funcs.go @@ -0,0 +1,488 @@ +package funcs + +import ( + "bytes" + "errors" + "fmt" + "html/template" + "math" + "net/url" + "slices" + "strconv" + "strings" + "time" + "unicode" + + "github.com/yuin/goldmark" + highlighting "github.com/yuin/goldmark-highlighting" + "golang.org/x/text/language" + "golang.org/x/text/message" +) + +type WidgetOption struct { + Key string + Value string +} + +const ( + day = 24 * time.Hour + year = 365 * day +) + +var printer = message.NewPrinter(language.English) + +var TemplateFuncs = template.FuncMap{ + // Time functions + "now": time.Now, + "timeSince": time.Since, + "timeUntil": time.Until, + "formatTime": formatTime, + "approxDuration": approxDuration, + + // String functions + "uppercase": strings.ToUpper, + "lowercase": strings.ToLower, + "pluralize": pluralize, + "slugify": slugify, + "safeHTML": safeHTML, + "renderFieldValue": renderFieldValue, + "renderFieldValues": renderFieldValues, + "stringToArray": stringToArray, + + // Slice functions + "join": strings.Join, + + // Number functions + "incr": incr, + "decr": decr, + "addI": addI, + "subI": subI, + "formatInt": formatInt, + "formatFloat": formatFloat, + + // Boolean functions + "yesno": yesno, + + // URL functions + "urlSetParam": urlSetParam, + "urlDelParam": urlDelParam, + + //Markdown render + "markdownfy": markdownfy, + + "linksList": linksList, + + //Widgets + "widget_relation_type": widget_relation_type, + "widget_text": widget_text, + "widget_select": widget_select, + "widget_checkboxes": widget_checkboxes, + "field_widget": field_widget, + + //Map + "map": tmap, +} + +func formatTime(format string, t time.Time) string { + return t.Format(format) +} + +func approxDuration(d time.Duration) string { + if d < time.Second { + return "less than 1 second" + } + + ds := int(math.Round(d.Seconds())) + if ds == 1 { + return "1 second" + } else if ds < 60 { + return fmt.Sprintf("%d seconds", ds) + } + + dm := int(math.Round(d.Minutes())) + if dm == 1 { + return "1 minute" + } else if dm < 60 { + return fmt.Sprintf("%d minutes", dm) + } + + dh := int(math.Round(d.Hours())) + if dh == 1 { + return "1 hour" + } else if dh < 24 { + return fmt.Sprintf("%d hours", dh) + } + + dd := int(math.Round(float64(d / day))) + if dd == 1 { + return "1 day" + } else if dd < 365 { + return fmt.Sprintf("%d days", dd) + } + + dy := int(math.Round(float64(d / year))) + if dy == 1 { + return "1 year" + } + + return fmt.Sprintf("%d years", dy) +} + +func pluralize(count any, singular string, plural string) (string, error) { + n, err := toInt64(count) + if err != nil { + return "", err + } + + if n == 1 { + return singular, nil + } + + return plural, nil +} + +func slugify(s string) string { + var buf bytes.Buffer + + for _, r := range s { + switch { + case r > unicode.MaxASCII: + continue + case unicode.IsLetter(r): + buf.WriteRune(unicode.ToLower(r)) + case unicode.IsDigit(r), r == '_', r == '-': + buf.WriteRune(r) + case unicode.IsSpace(r): + buf.WriteRune('-') + } + } + + return buf.String() +} + +func safeHTML(s string) template.HTML { + return template.HTML(s) +} + +func incr(i any) (int64, error) { + n, err := toInt64(i) + if err != nil { + return 0, err + } + + n++ + return n, nil +} + +func decr(i any) (int64, error) { + n, err := toInt64(i) + if err != nil { + return 0, err + } + + n-- + return n, nil +} + +func addI(i1 any, i2 any) (int64, error) { + i1_64, err := toInt64(i1) + if err != nil { + return 0, err + } + i2_64, err := toInt64(i2) + if err != nil { + return 0, err + } + + t := i1_64 + i2_64 + return t, nil +} + +func subI(i1 any, i2 any) (int64, error) { + i1_64, err := toInt64(i1) + if err != nil { + return 0, err + } + i2_64, err := toInt64(i2) + if err != nil { + return 0, err + } + + t := i1_64 - i2_64 + return t, nil +} + +func formatInt(i any) (string, error) { + n, err := toInt64(i) + if err != nil { + return "", err + } + + return printer.Sprintf("%d", n), nil +} + +func formatFloat(f float64, dp int) string { + format := "%." + strconv.Itoa(dp) + "f" + return printer.Sprintf(format, f) +} + +func yesno(b bool) string { + if b { + return "Yes" + } + + return "No" +} + +func urlSetParam(u *url.URL, key string, value any) *url.URL { + nu := *u + values := nu.Query() + + values.Set(key, fmt.Sprintf("%v", value)) + + nu.RawQuery = values.Encode() + return &nu +} + +func urlDelParam(u *url.URL, key string) *url.URL { + nu := *u + values := nu.Query() + + values.Del(key) + + nu.RawQuery = values.Encode() + return &nu +} + +func toInt64(i any) (int64, error) { + switch v := i.(type) { + case int: + return int64(v), nil + case int8: + return int64(v), nil + case int16: + return int64(v), nil + case int32: + return int64(v), nil + case int64: + return v, nil + case uint: + return int64(v), nil + case uint8: + return int64(v), nil + case uint16: + return int64(v), nil + case uint32: + return int64(v), nil + // Note: uint64 not supported due to risk of truncation. + case string: + return strconv.ParseInt(v, 10, 64) + } + + return 0, fmt.Errorf("unable to convert type %T to int", i) +} + +func markdownfy(s string) string { + markdown := goldmark.New( + goldmark.WithExtensions( + highlighting.Highlighting, + ), + ) + + var buf bytes.Buffer + markdown.Convert([]byte(s), &buf) + return buf.String() +} + +func stringToArray(s string, delim string) []string { + return strings.Split(strings.Trim(s, delim), delim) +} + +func renderFieldValueAsString(value string, widget string) string { + o := "" + widget = strings.ToLower(widget) + switch widget { + case "url": + if len(value) > 0 { + label, _ := strings.CutPrefix(value, "https://") + label, _ = strings.CutPrefix(label, "www.") + if len(label) > 20 { + label = label[:20] + " ..." + } + o = fmt.Sprintf("%v", value, value, label) + } + default: + o = strings.Trim(fmt.Sprint(value), "[]") + } + return o +} + +func renderFieldValue(value string, widget string) template.HTML { + return template.HTML(renderFieldValueAsString(value, widget)) +} + +func renderFieldValues(values map[int]string, widget string) template.HTML { + if len(values) > 0 { + var values_a []string + for _, value := range values { + values_a = append(values_a, renderFieldValueAsString(value, widget)) + } + + return template.HTML(strings.Join(values_a, ",")) + } + + return template.HTML("") +} + +func linksList(urls map[string]string, delim string) template.HTML { + o := "" + return template.HTML(o) +} + +func widget_relation_type(name string, value string, attributes string) template.HTML { + var options []WidgetOption + + options = append(options, WidgetOption{Key: "Parent", Value: "Parent"}) + options = append(options, WidgetOption{Key: "Child", Value: "Child"}) + options = append(options, WidgetOption{Key: "Link", Value: "Link"}) + + return widget_select(name, "", value, options, attributes) +} + +func widget_select(name string, label string, value any, options []WidgetOption, attributes string) template.HTML { + var values []string + + switch v := value.(type) { + case int64: + values = append(values, strconv.FormatInt(v, 10)) + case []int64: + for _, i := range v { + values = append(values, strconv.FormatInt(i, 10)) + } + case string: + if strings.HasPrefix(v, "|") && strings.HasSuffix(v, "|") { + values = strings.Split(strings.Trim(v, "|"), "|") + } else { + values = append(values, v) + } + case []string: + values = v + } + + o := "" + if len(label) > 0 { + o = fmt.Sprintf(``, name, label) + } + o = o + fmt.Sprintf(`` + return template.HTML(o) +} + +func widget_checkboxes(name string, label string, value any, options []WidgetOption, attributes string) template.HTML { + var values []string + + switch v := value.(type) { + case int64: + values = append(values, strconv.FormatInt(v, 10)) + case []int64: + for _, i := range v { + values = append(values, strconv.FormatInt(i, 10)) + } + case string: + if strings.HasPrefix(v, "|") && strings.HasSuffix(v, "|") { + values = strings.Split(strings.Trim(v, "|"), "|") + } else { + values = append(values, v) + } + case []string: + values = v + } + + o := "" + o = o + "
    " + if len(label) > 0 { + o = o + fmt.Sprintf(``, label) + } + checked := "" + for _, option := range options { + checked = "" + if slices.Contains(values, option.Key) { + checked = `checked="checked"` + } + id_str := strings.ReplaceAll(name+"-"+option.Key, " ", "-") + o = o + "

    " + o = o + fmt.Sprintf(``, id_str, id_str, name, checked, option.Key, attributes) + o = o + fmt.Sprintf(`%v`, id_str, option.Value) + o = o + "

    " + } + o = o + "" + return template.HTML(o) +} + +func widget_text(name string, label string, value string, attributes string) template.HTML { + o := "" + if len(label) > 0 { + o = o + fmt.Sprintf(``, name, label) + } + o = o + fmt.Sprintf(``, name, name, value, attributes) + return template.HTML(o) +} + +func widget_url(name string, label string, value string, attributes string) template.HTML { + o := "" + if len(label) > 0 { + o = o + fmt.Sprintf(``, name, label) + } + o = o + fmt.Sprintf(``, name, name, value, attributes) + return template.HTML(o) +} + +func field_widget(widget string, bm_type_field_id int64, counter int, label string, value string, valid_values string, attributes string) template.HTML { + widget_name := fmt.Sprintf("FieldsValues-%v-%v", bm_type_field_id, counter) + var options []WidgetOption + + switch widget { + case "select": + entries := strings.Split(valid_values, "|") + for _, entry := range entries { + parts := strings.Split(entry, ",") + if len(parts) == 2 { + options = append(options, WidgetOption{Key: parts[0], Value: parts[1]}) + } else if len(parts) == 1 { + options = append(options, WidgetOption{Key: parts[0], Value: parts[0]}) + } + } + return widget_select(widget_name, label, value, options, attributes) + case "text": + return widget_text(widget_name, label, value, attributes) + case "url": + return widget_url(widget_name, label, value, attributes) + } + + return template.HTML("") +} + +func tmap(pairs ...any) (map[string]any, error) { + if len(pairs)%2 != 0 { + return nil, errors.New("misaligned map") + } + + m := make(map[string]any, len(pairs)/2) + + for i := 0; i < len(pairs); i += 2 { + key, ok := pairs[i].(string) + if !ok { + return nil, fmt.Errorf("cannot use type %T as map key", pairs[i]) + } + m[key] = pairs[i+1] + } + return m, nil +} diff --git a/internal/password/common.go b/internal/password/common.go new file mode 100644 index 0000000..0b27136 --- /dev/null +++ b/internal/password/common.go @@ -0,0 +1,10006 @@ +package password + +// CommonPasswords list is from +// https://github.com/danielmiessler/SecLists/blob/master/Passwords/Common-Credentials/10k-most-common.txt +var CommonPasswords = []string{ + "password", + "123456", + "12345678", + "1234", + "qwerty", + "12345", + "dragon", + "pussy", + "baseball", + "football", + "letmein", + "monkey", + "696969", + "abc123", + "mustang", + "michael", + "shadow", + "master", + "jennifer", + "111111", + "2000", + "jordan", + "superman", + "harley", + "1234567", + "fuckme", + "hunter", + "fuckyou", + "trustno1", + "ranger", + "buster", + "thomas", + "tigger", + "robert", + "soccer", + "fuck", + "batman", + "test", + "pass", + "killer", + "hockey", + "george", + "charlie", + "andrew", + "michelle", + "love", + "sunshine", + "jessica", + "asshole", + "6969", + "pepper", + "daniel", + "access", + "123456789", + "654321", + "joshua", + "maggie", + "starwars", + "silver", + "william", + "dallas", + "yankees", + "123123", + "ashley", + "666666", + "hello", + "amanda", + "orange", + "biteme", + "freedom", + "computer", + "sexy", + "thunder", + "nicole", + "ginger", + "heather", + "hammer", + "summer", + "corvette", + "taylor", + "fucker", + "austin", + "1111", + "merlin", + "matthew", + "121212", + "golfer", + "cheese", + "princess", + "martin", + "chelsea", + "patrick", + "richard", + "diamond", + "yellow", + "bigdog", + "secret", + "asdfgh", + "sparky", + "cowboy", + "camaro", + "anthony", + "matrix", + "falcon", + "iloveyou", + "bailey", + "guitar", + "jackson", + "purple", + "scooter", + "phoenix", + "aaaaaa", + "morgan", + "tigers", + "porsche", + "mickey", + "maverick", + "cookie", + "nascar", + "peanut", + "justin", + "131313", + "money", + "horny", + "samantha", + "panties", + "steelers", + "joseph", + "snoopy", + "boomer", + "whatever", + "iceman", + "smokey", + "gateway", + "dakota", + "cowboys", + "eagles", + "chicken", + "dick", + "black", + "zxcvbn", + "please", + "andrea", + "ferrari", + "knight", + "hardcore", + "melissa", + "compaq", + "coffee", + "booboo", + "bitch", + "johnny", + "bulldog", + "xxxxxx", + "welcome", + "james", + "player", + "ncc1701", + "wizard", + "scooby", + "charles", + "junior", + "internet", + "bigdick", + "mike", + "brandy", + "tennis", + "blowjob", + "banana", + "monster", + "spider", + "lakers", + "miller", + "rabbit", + "enter", + "mercedes", + "brandon", + "steven", + "fender", + "john", + "yamaha", + "diablo", + "chris", + "boston", + "tiger", + "marine", + "chicago", + "rangers", + "gandalf", + "winter", + "bigtits", + "barney", + "edward", + "raiders", + "porn", + "badboy", + "blowme", + "spanky", + "bigdaddy", + "johnson", + "chester", + "london", + "midnight", + "blue", + "fishing", + "0", + "hannah", + "slayer", + "11111111", + "rachel", + "sexsex", + "redsox", + "thx1138", + "asdf", + "marlboro", + "panther", + "zxcvbnm", + "arsenal", + "oliver", + "qazwsx", + "mother", + "victoria", + "7777777", + "jasper", + "angel", + "david", + "winner", + "crystal", + "golden", + "butthead", + "viking", + "jack", + "iwantu", + "shannon", + "murphy", + "angels", + "prince", + "cameron", + "girls", + "madison", + "wilson", + "carlos", + "hooters", + "willie", + "startrek", + "captain", + "maddog", + "jasmine", + "butter", + "booger", + "angela", + "golf", + "lauren", + "rocket", + "tiffany", + "theman", + "dennis", + "liverpoo", + "flower", + "forever", + "green", + "jackie", + "muffin", + "turtle", + "sophie", + "danielle", + "redskins", + "toyota", + "jason", + "sierra", + "winston", + "debbie", + "giants", + "packers", + "newyork", + "jeremy", + "casper", + "bubba", + "112233", + "sandra", + "lovers", + "mountain", + "united", + "cooper", + "driver", + "tucker", + "helpme", + "fucking", + "pookie", + "lucky", + "maxwell", + "8675309", + "bear", + "suckit", + "gators", + "5150", + "222222", + "shithead", + "fuckoff", + "jaguar", + "monica", + "fred", + "happy", + "hotdog", + "tits", + "gemini", + "lover", + "xxxxxxxx", + "777777", + "canada", + "nathan", + "victor", + "florida", + "88888888", + "nicholas", + "rosebud", + "metallic", + "doctor", + "trouble", + "success", + "stupid", + "tomcat", + "warrior", + "peaches", + "apples", + "fish", + "qwertyui", + "magic", + "buddy", + "dolphins", + "rainbow", + "gunner", + "987654", + "freddy", + "alexis", + "braves", + "cock", + "2112", + "1212", + "cocacola", + "xavier", + "dolphin", + "testing", + "bond007", + "member", + "calvin", + "voodoo", + "7777", + "samson", + "alex", + "apollo", + "fire", + "tester", + "walter", + "beavis", + "voyager", + "peter", + "porno", + "bonnie", + "rush2112", + "beer", + "apple", + "scorpio", + "jonathan", + "skippy", + "sydney", + "scott", + "red123", + "power", + "gordon", + "travis", + "beaver", + "star", + "jackass", + "flyers", + "boobs", + "232323", + "zzzzzz", + "steve", + "rebecca", + "scorpion", + "doggie", + "legend", + "ou812", + "yankee", + "blazer", + "bill", + "runner", + "birdie", + "bitches", + "555555", + "parker", + "topgun", + "asdfasdf", + "heaven", + "viper", + "animal", + "2222", + "bigboy", + "4444", + "arthur", + "baby", + "private", + "godzilla", + "donald", + "williams", + "lifehack", + "phantom", + "dave", + "rock", + "august", + "sammy", + "cool", + "brian", + "platinum", + "jake", + "bronco", + "paul", + "mark", + "frank", + "heka6w2", + "copper", + "billy", + "cumshot", + "garfield", + "willow", + "cunt", + "little", + "carter", + "slut", + "albert", + "69696969", + "kitten", + "super", + "jordan23", + "eagle1", + "shelby", + "america", + "11111", + "jessie", + "house", + "free", + "123321", + "chevy", + "bullshit", + "white", + "broncos", + "horney", + "surfer", + "nissan", + "999999", + "saturn", + "airborne", + "elephant", + "marvin", + "shit", + "action", + "adidas", + "qwert", + "kevin", + "1313", + "explorer", + "walker", + "police", + "christin", + "december", + "benjamin", + "wolf", + "sweet", + "therock", + "king", + "online", + "dickhead", + "brooklyn", + "teresa", + "cricket", + "sharon", + "dexter", + "racing", + "penis", + "gregory", + "0", + "teens", + "redwings", + "dreams", + "michigan", + "hentai", + "magnum", + "87654321", + "nothing", + "donkey", + "trinity", + "digital", + "333333", + "stella", + "cartman", + "guinness", + "123abc", + "speedy", + "buffalo", + "kitty", + "pimpin", + "eagle", + "einstein", + "kelly", + "nelson", + "nirvana", + "vampire", + "xxxx", + "playboy", + "louise", + "pumpkin", + "snowball", + "test123", + "girl", + "sucker", + "mexico", + "beatles", + "fantasy", + "ford", + "gibson", + "celtic", + "marcus", + "cherry", + "cassie", + "888888", + "natasha", + "sniper", + "chance", + "genesis", + "hotrod", + "reddog", + "alexande", + "college", + "jester", + "passw0rd", + "bigcock", + "smith", + "lasvegas", + "carmen", + "slipknot", + "3333", + "death", + "kimberly", + "1q2w3e", + "eclipse", + "1q2w3e4r", + "stanley", + "samuel", + "drummer", + "homer", + "montana", + "music", + "aaaa", + "spencer", + "jimmy", + "carolina", + "colorado", + "creative", + "hello1", + "rocky", + "goober", + "friday", + "bollocks", + "scotty", + "abcdef", + "bubbles", + "hawaii", + "fluffy", + "mine", + "stephen", + "horses", + "thumper", + "5555", + "pussies", + "darkness", + "asdfghjk", + "pamela", + "boobies", + "buddha", + "vanessa", + "sandman", + "naughty", + "douglas", + "honda", + "matt", + "azerty", + "6666", + "shorty", + "money1", + "beach", + "loveme", + "4321", + "simple", + "poohbear", + "444444", + "badass", + "destiny", + "sarah", + "denise", + "vikings", + "lizard", + "melanie", + "assman", + "sabrina", + "nintendo", + "water", + "good", + "howard", + "time", + "123qwe", + "november", + "xxxxx", + "october", + "leather", + "bastard", + "young", + "101010", + "extreme", + "hard", + "password1", + "vincent", + "pussy1", + "lacrosse", + "hotmail", + "spooky", + "amateur", + "alaska", + "badger", + "paradise", + "maryjane", + "poop", + "crazy", + "mozart", + "video", + "russell", + "vagina", + "spitfire", + "anderson", + "norman", + "eric", + "cherokee", + "cougar", + "barbara", + "long", + "420420", + "family", + "horse", + "enigma", + "allison", + "raider", + "brazil", + "blonde", + "jones", + "55555", + "dude", + "drowssap", + "jeff", + "school", + "marshall", + "lovely", + "1qaz2wsx", + "jeffrey", + "caroline", + "franklin", + "booty", + "molly", + "snickers", + "leslie", + "nipples", + "courtney", + "diesel", + "rocks", + "eminem", + "westside", + "suzuki", + "daddy", + "passion", + "hummer", + "ladies", + "zachary", + "frankie", + "elvis", + "reggie", + "alpha", + "suckme", + "simpson", + "patricia", + "147147", + "pirate", + "tommy", + "semperfi", + "jupiter", + "redrum", + "freeuser", + "wanker", + "stinky", + "ducati", + "paris", + "natalie", + "babygirl", + "bishop", + "windows", + "spirit", + "pantera", + "monday", + "patches", + "brutus", + "houston", + "smooth", + "penguin", + "marley", + "forest", + "cream", + "212121", + "flash", + "maximus", + "nipple", + "bobby", + "bradley", + "vision", + "pokemon", + "champion", + "fireman", + "indian", + "softball", + "picard", + "system", + "clinton", + "cobra", + "enjoy", + "lucky1", + "claire", + "claudia", + "boogie", + "timothy", + "marines", + "security", + "dirty", + "admin", + "wildcats", + "pimp", + "dancer", + "hardon", + "veronica", + "fucked", + "abcd1234", + "abcdefg", + "ironman", + "wolverin", + "remember", + "great", + "freepass", + "bigred", + "squirt", + "justice", + "francis", + "hobbes", + "kermit", + "pearljam", + "mercury", + "domino", + "9999", + "denver", + "brooke", + "rascal", + "hitman", + "mistress", + "simon", + "tony", + "bbbbbb", + "friend", + "peekaboo", + "naked", + "budlight", + "electric", + "sluts", + "stargate", + "saints", + "bondage", + "brittany", + "bigman", + "zombie", + "swimming", + "duke", + "qwerty1", + "babes", + "scotland", + "disney", + "rooster", + "brenda", + "mookie", + "swordfis", + "candy", + "duncan", + "olivia", + "hunting", + "blink182", + "alicia", + "8888", + "samsung", + "bubba1", + "whore", + "virginia", + "general", + "passport", + "aaaaaaaa", + "erotic", + "liberty", + "arizona", + "jesus", + "abcd", + "newport", + "skipper", + "rolltide", + "balls", + "happy1", + "galore", + "christ", + "weasel", + "242424", + "wombat", + "digger", + "classic", + "bulldogs", + "poopoo", + "accord", + "popcorn", + "turkey", + "jenny", + "amber", + "bunny", + "mouse", + "7007", + "titanic", + "liverpool", + "dreamer", + "everton", + "friends", + "chevelle", + "carrie", + "gabriel", + "psycho", + "nemesis", + "burton", + "pontiac", + "connor", + "eatme", + "lickme", + "roland", + "cumming", + "mitchell", + "ireland", + "lincoln", + "arnold", + "spiderma", + "patriots", + "goblue", + "devils", + "eugene", + "empire", + "asdfg", + "cardinal", + "brown", + "shaggy", + "froggy", + "qwer", + "kawasaki", + "kodiak", + "people", + "phpbb", + "light", + "54321", + "kramer", + "chopper", + "hooker", + "honey", + "whynot", + "lesbian", + "lisa", + "baxter", + "adam", + "snake", + "teen", + "ncc1701d", + "qqqqqq", + "airplane", + "britney", + "avalon", + "sandy", + "sugar", + "sublime", + "stewart", + "wildcat", + "raven", + "scarface", + "elizabet", + "123654", + "trucks", + "wolfpack", + "pervert", + "lawrence", + "raymond", + "redhead", + "american", + "alyssa", + "bambam", + "movie", + "woody", + "shaved", + "snowman", + "tiger1", + "chicks", + "raptor", + "1969", + "stingray", + "shooter", + "france", + "stars", + "madmax", + "kristen", + "sports", + "jerry", + "789456", + "garcia", + "simpsons", + "lights", + "ryan", + "looking", + "chronic", + "alison", + "hahaha", + "packard", + "hendrix", + "perfect", + "service", + "spring", + "srinivas", + "spike", + "katie", + "252525", + "oscar", + "brother", + "bigmac", + "suck", + "single", + "cannon", + "georgia", + "popeye", + "tattoo", + "texas", + "party", + "bullet", + "taurus", + "sailor", + "wolves", + "panthers", + "japan", + "strike", + "flowers", + "pussycat", + "chris1", + "loverboy", + "berlin", + "sticky", + "marina", + "tarheels", + "fisher", + "russia", + "connie", + "wolfgang", + "testtest", + "mature", + "bass", + "catch22", + "juice", + "michael1", + "nigger", + "159753", + "women", + "alpha1", + "trooper", + "hawkeye", + "head", + "freaky", + "dodgers", + "pakistan", + "machine", + "pyramid", + "vegeta", + "katana", + "moose", + "tinker", + "coyote", + "infinity", + "inside", + "pepsi", + "letmein1", + "bang", + "control", + "hercules", + "morris", + "james1", + "tickle", + "outlaw", + "browns", + "billybob", + "pickle", + "test1", + "michele", + "antonio", + "sucks", + "pavilion", + "changeme", + "caesar", + "prelude", + "tanner", + "adrian", + "darkside", + "bowling", + "wutang", + "sunset", + "robbie", + "alabama", + "danger", + "zeppelin", + "juan", + "rusty", + "pppppp", + "nick", + "2001", + "ping", + "darkstar", + "madonna", + "qwe123", + "bigone", + "casino", + "cheryl", + "charlie1", + "mmmmmm", + "integra", + "wrangler", + "apache", + "tweety", + "qwerty12", + "bobafett", + "simone", + "none", + "business", + "sterling", + "trevor", + "transam", + "dustin", + "harvey", + "england", + "2323", + "seattle", + "ssssss", + "rose", + "harry", + "openup", + "pandora", + "pussys", + "trucker", + "wallace", + "indigo", + "storm", + "malibu", + "weed", + "review", + "babydoll", + "doggy", + "dilbert", + "pegasus", + "joker", + "catfish", + "flipper", + "valerie", + "herman", + "fuckit", + "detroit", + "kenneth", + "cheyenne", + "bruins", + "stacey", + "smoke", + "joey", + "seven", + "marino", + "fetish", + "xfiles", + "wonder", + "stinger", + "pizza", + "babe", + "pretty", + "stealth", + "manutd", + "gracie", + "gundam", + "cessna", + "longhorn", + "presario", + "mnbvcxz", + "wicked", + "mustang1", + "victory", + "21122112", + "shelly", + "awesome", + "athena", + "q1w2e3r4", + "help", + "holiday", + "knicks", + "street", + "redneck", + "12341234", + "casey", + "gizmo", + "scully", + "dragon1", + "devildog", + "triumph", + "eddie", + "bluebird", + "shotgun", + "peewee", + "ronnie", + "angel1", + "daisy", + "special", + "metallica", + "madman", + "country", + "impala", + "lennon", + "roscoe", + "omega", + "access14", + "enterpri", + "miranda", + "search", + "smitty", + "blizzard", + "unicorn", + "tight", + "rick", + "ronald", + "asdf1234", + "harrison", + "trigger", + "truck", + "danny", + "home", + "winnie", + "beauty", + "thailand", + "1234567890", + "cadillac", + "castle", + "tyler", + "bobcat", + "buddy1", + "sunny", + "stones", + "asian", + "freddie", + "chuck", + "butt", + "loveyou", + "norton", + "hellfire", + "hotsex", + "indiana", + "short", + "panzer", + "lonewolf", + "trumpet", + "colors", + "blaster", + "12121212", + "fireball", + "logan", + "precious", + "aaron", + "elaine", + "jungle", + "atlanta", + "gold", + "corona", + "curtis", + "nikki", + "polaris", + "timber", + "theone", + "baller", + "chipper", + "orlando", + "island", + "skyline", + "dragons", + "dogs", + "benson", + "licker", + "goldie", + "engineer", + "kong", + "pencil", + "basketba", + "open", + "hornet", + "world", + "linda", + "barbie", + "chan", + "farmer", + "valentin", + "wetpussy", + "indians", + "larry", + "redman", + "foobar", + "travel", + "morpheus", + "bernie", + "target", + "141414", + "hotstuff", + "photos", + "laura", + "savage", + "holly", + "rocky1", + "fuck_inside", + "dollar", + "turbo", + "design", + "newton", + "hottie", + "moon", + "202020", + "blondes", + "4128", + "lestat", + "avatar", + "future", + "goforit", + "random", + "abgrtyu", + "jjjjjj", + "cancer", + "q1w2e3", + "smiley", + "goldberg", + "express", + "virgin", + "zipper", + "wrinkle1", + "stone", + "andy", + "babylon", + "dong", + "powers", + "consumer", + "dudley", + "monkey1", + "serenity", + "samurai", + "99999999", + "bigboobs", + "skeeter", + "lindsay", + "joejoe", + "master1", + "aaaaa", + "chocolat", + "christia", + "birthday", + "stephani", + "tang", + "1234qwer", + "alfred", + "ball", + "98765432", + "maria", + "sexual", + "maxima", + "77777777", + "sampson", + "buckeye", + "highland", + "kristin", + "seminole", + "reaper", + "bassman", + "nugget", + "lucifer", + "airforce", + "nasty", + "watson", + "warlock", + "2121", + "philip", + "always", + "dodge", + "chrissy", + "burger", + "bird", + "snatch", + "missy", + "pink", + "gang", + "maddie", + "holmes", + "huskers", + "piglet", + "photo", + "joanne", + "hamilton", + "dodger", + "paladin", + "christy", + "chubby", + "buckeyes", + "hamlet", + "abcdefgh", + "bigfoot", + "sunday", + "manson", + "goldfish", + "garden", + "deftones", + "icecream", + "blondie", + "spartan", + "julie", + "harold", + "charger", + "brandi", + "stormy", + "sherry", + "pleasure", + "juventus", + "rodney", + "galaxy", + "holland", + "escort", + "zxcvb", + "planet", + "jerome", + "wesley", + "blues", + "song", + "peace", + "david1", + "ncc1701e", + "1966", + "51505150", + "cavalier", + "gambit", + "karen", + "sidney", + "ripper", + "oicu812", + "jamie", + "sister", + "marie", + "martha", + "nylons", + "aardvark", + "nadine", + "minnie", + "whiskey", + "bing", + "plastic", + "anal", + "babylon5", + "chang", + "savannah", + "loser", + "racecar", + "insane", + "yankees1", + "mememe", + "hansolo", + "chiefs", + "fredfred", + "freak", + "frog", + "salmon", + "concrete", + "yvonne", + "zxcv", + "shamrock", + "atlantis", + "warren", + "wordpass", + "julian", + "mariah", + "rommel", + "1010", + "harris", + "predator", + "sylvia", + "massive", + "cats", + "sammy1", + "mister", + "stud", + "marathon", + "rubber", + "ding", + "trunks", + "desire", + "montreal", + "justme", + "faster", + "kathleen", + "irish", + "1999", + "bertha", + "jessica1", + "alpine", + "sammie", + "diamonds", + "tristan", + "0", + "swinger", + "shan", + "stallion", + "pitbull", + "letmein2", + "roberto", + "ready", + "april", + "palmer", + "ming", + "shadow1", + "audrey", + "chong", + "clitoris", + "wang", + "shirley", + "fuckers", + "jackoff", + "bluesky", + "sundance", + "renegade", + "hollywoo", + "151515", + "bernard", + "wolfman", + "soldier", + "picture", + "pierre", + "ling", + "goddess", + "manager", + "nikita", + "sweety", + "titans", + "hang", + "fang", + "ficken", + "niners", + "bottom", + "bubble", + "hello123", + "ibanez", + "webster", + "sweetpea", + "stocking", + "323232", + "tornado", + "lindsey", + "content", + "bruce", + "buck", + "aragorn", + "griffin", + "chen", + "campbell", + "trojan", + "christop", + "newman", + "wayne", + "tina", + "rockstar", + "father", + "geronimo", + "pascal", + "crimson", + "brooks", + "hector", + "penny", + "anna", + "google", + "camera", + "chandler", + "fatcat", + "lovelove", + "cody", + "cunts", + "waters", + "stimpy", + "finger", + "cindy", + "wheels", + "viper1", + "latin", + "robin", + "greenday", + "987654321", + "creampie", + "brendan", + "hiphop", + "willy", + "snapper", + "funtime", + "duck", + "trombone", + "adult", + "cotton", + "cookies", + "kaiser", + "mulder", + "westham", + "latino", + "jeep", + "ravens", + "aurora", + "drizzt", + "madness", + "energy", + "kinky", + "314159", + "sophia", + "stefan", + "slick", + "rocker", + "55555555", + "freeman", + "french", + "mongoose", + "speed", + "dddddd", + "hong", + "henry", + "hungry", + "yang", + "catdog", + "cheng", + "ghost", + "gogogo", + "randy", + "tottenha", + "curious", + "butterfl", + "mission", + "january", + "singer", + "sherman", + "shark", + "techno", + "lancer", + "lalala", + "autumn", + "chichi", + "orion", + "trixie", + "clifford", + "delta", + "bobbob", + "bomber", + "holden", + "kang", + "kiss", + "1968", + "spunky", + "liquid", + "mary", + "beagle", + "granny", + "network", + "bond", + "kkkkkk", + "millie", + "1973", + "biggie", + "beetle", + "teacher", + "susan", + "toronto", + "anakin", + "genius", + "dream", + "cocks", + "dang", + "bush", + "karate", + "snakes", + "bangkok", + "callie", + "fuckyou2", + "pacific", + "daytona", + "kelsey", + "infantry", + "skywalke", + "foster", + "felix", + "sailing", + "raistlin", + "vanhalen", + "huang", + "herbert", + "jacob", + "blackie", + "tarzan", + "strider", + "sherlock", + "lang", + "gong", + "sang", + "dietcoke", + "ultimate", + "tree", + "shai", + "sprite", + "ting", + "artist", + "chai", + "chao", + "devil", + "python", + "ninja", + "misty", + "ytrewq", + "sweetie", + "superfly", + "456789", + "tian", + "jing", + "jesus1", + "freedom1", + "dian", + "drpepper", + "potter", + "chou", + "darren", + "hobbit", + "violet", + "yong", + "shen", + "phillip", + "maurice", + "gloria", + "nolimit", + "mylove", + "biscuit", + "yahoo", + "shasta", + "sex4me", + "smoker", + "smile", + "pebbles", + "pics", + "philly", + "tong", + "tintin", + "lesbians", + "marlin", + "cactus", + "frank1", + "tttttt", + "chun", + "danni", + "emerald", + "showme", + "pirates", + "lian", + "dogg", + "colleen", + "xiao", + "xian", + "tazman", + "tanker", + "patton", + "toshiba", + "richie", + "alberto", + "gotcha", + "graham", + "dillon", + "rang", + "emily", + "keng", + "jazz", + "bigguy", + "yuan", + "woman", + "tomtom", + "marion", + "greg", + "chaos", + "fossil", + "flight", + "racerx", + "tuan", + "creamy", + "boss", + "bobo", + "musicman", + "warcraft", + "window", + "blade", + "shuang", + "sheila", + "shun", + "lick", + "jian", + "microsoft", + "rong", + "allen", + "feng", + "getsome", + "sally", + "quality", + "kennedy", + "morrison", + "1977", + "beng", + "wwwwww", + "yoyoyo", + "zhang", + "seng", + "teddy", + "joanna", + "andreas", + "harder", + "luke", + "qazxsw", + "qian", + "cong", + "chuan", + "deng", + "nang", + "boeing", + "keeper", + "western", + "isabelle", + "1963", + "subaru", + "sheng", + "thuglife", + "teng", + "jiong", + "miao", + "martina", + "mang", + "maniac", + "pussie", + "tracey", + "a1b2c3", + "clayton", + "zhou", + "zhuang", + "xing", + "stonecol", + "snow", + "spyder", + "liang", + "jiang", + "memphis", + "regina", + "ceng", + "magic1", + "logitech", + "chuang", + "dark", + "million", + "blow", + "sesame", + "shao", + "poison", + "titty", + "terry", + "kuan", + "kuai", + "kyle", + "mian", + "guan", + "hamster", + "guai", + "ferret", + "florence", + "geng", + "duan", + "pang", + "maiden", + "quan", + "velvet", + "nong", + "neng", + "nookie", + "buttons", + "bian", + "bingo", + "biao", + "zhong", + "zeng", + "xiong", + "zhun", + "ying", + "zong", + "xuan", + "zang", + "0.0.000", + "suan", + "shei", + "shui", + "sharks", + "shang", + "shua", + "small", + "peng", + "pian", + "piao", + "liao", + "meng", + "miami", + "reng", + "guang", + "cang", + "change", + "ruan", + "diao", + "luan", + "lucas", + "qing", + "chui", + "chuo", + "cuan", + "nuan", + "ning", + "heng", + "huan", + "kansas", + "muscle", + "monroe", + "weng", + "whitney", + "1passwor", + "bluemoon", + "zhui", + "zhua", + "xiang", + "zheng", + "zhen", + "zhei", + "zhao", + "zhan", + "yomama", + "zhai", + "zhuo", + "zuan", + "tarheel", + "shou", + "shuo", + "tiao", + "lady", + "leonard", + "leng", + "kuang", + "jiao", + "13579", + "basket", + "qiao", + "qiong", + "qiang", + "chuai", + "nian", + "niao", + "niang", + "huai", + "22222222", + "bianca", + "zhuan", + "zhuai", + "shuan", + "shuai", + "stardust", + "jumper", + "margaret", + "archie", + "66666666", + "charlott", + "forget", + "qwertz", + "bones", + "history", + "milton", + "waterloo", + "2002", + "stuff", + "11223344", + "office", + "oldman", + "preston", + "trains", + "murray", + "vertigo", + "246810", + "black1", + "swallow", + "smiles", + "standard", + "alexandr", + "parrot", + "luther", + "user", + "nicolas", + "1976", + "surfing", + "pioneer", + "pete", + "masters", + "apple1", + "asdasd", + "auburn", + "hannibal", + "frontier", + "panama", + "lucy", + "buffy", + "brianna", + "welcome1", + "vette", + "blue22", + "shemale", + "111222", + "baggins", + "groovy", + "global", + "turner", + "181818", + "1979", + "blades", + "spanking", + "life", + "byteme", + "lobster", + "collins", + "dawg", + "hilton", + "japanese", + "1970", + "1964", + "2424", + "polo", + "markus", + "coco", + "deedee", + "mikey", + "1972", + "171717", + "1701", + "strip", + "jersey", + "green1", + "capital", + "sasha", + "sadie", + "putter", + "vader", + "seven7", + "lester", + "marcel", + "banshee", + "grendel", + "gilbert", + "dicks", + "dead", + "hidden", + "iloveu", + "1980", + "sound", + "ledzep", + "michel", + "147258", + "female", + "bugger", + "buffett", + "bryan", + "hell", + "kristina", + "molson", + "2020", + "wookie", + "sprint", + "thanks", + "jericho", + "102030", + "grace", + "fuckin", + "mandy", + "ranger1", + "trebor", + "deepthroat", + "bonehead", + "molly1", + "mirage", + "models", + "1984", + "2468", + "stuart", + "showtime", + "squirrel", + "pentium", + "mario", + "anime", + "gator", + "powder", + "twister", + "connect", + "neptune", + "bruno", + "butts", + "engine", + "eatshit", + "mustangs", + "woody1", + "shogun", + "septembe", + "pooh", + "jimbo", + "roger", + "annie", + "bacon", + "center", + "russian", + "sabine", + "damien", + "mollie", + "voyeur", + "2525", + "363636", + "leonardo", + "camel", + "chair", + "germany", + "giant", + "qqqq", + "nudist", + "bone", + "sleepy", + "tequila", + "megan", + "fighter", + "garrett", + "dominic", + "obiwan", + "makaveli", + "vacation", + "walnut", + "1974", + "ladybug", + "cantona", + "ccbill", + "satan", + "rusty1", + "passwor1", + "columbia", + "napoleon", + "dusty", + "kissme", + "motorola", + "william1", + "1967", + "zzzz", + "skater", + "smut", + "play", + "matthew1", + "robinson", + "valley", + "coolio", + "dagger", + "boner", + "bull", + "horndog", + "jason1", + "blake", + "penguins", + "rescue", + "griffey", + "8j4ye3uz", + "californ", + "champs", + "qwertyuiop", + "portland", + "queen", + "colt45", + "boat", + "xxxxxxx", + "xanadu", + "tacoma", + "mason", + "carpet", + "gggggg", + "safety", + "palace", + "italia", + "stevie", + "picturs", + "picasso", + "thongs", + "tempest", + "ricardo", + "roberts", + "asd123", + "hairy", + "foxtrot", + "gary", + "nimrod", + "hotboy", + "343434", + "1111111", + "asdfghjkl", + "goose", + "overlord", + "blood", + "wood", + "stranger", + "454545", + "shaolin", + "sooners", + "socrates", + "spiderman", + "peanuts", + "maxine", + "rogers", + "13131313", + "andrew1", + "filthy", + "donnie", + "ohyeah", + "africa", + "national", + "kenny", + "keith", + "monique", + "intrepid", + "jasmin", + "pickles", + "assass", + "fright", + "potato", + "darwin", + "hhhhhh", + "kingdom", + "weezer", + "424242", + "pepsi1", + "throat", + "romeo", + "gerard", + "looker", + "puppy", + "butch", + "monika", + "suzanne", + "sweets", + "temple", + "laurie", + "josh", + "megadeth", + "analsex", + "nymets", + "ddddddd", + "bigballs", + "support", + "stick", + "today", + "down", + "oakland", + "oooooo", + "qweasd", + "chucky", + "bridge", + "carrot", + "chargers", + "discover", + "dookie", + "condor", + "night", + "butler", + "hoover", + "horny1", + "isabella", + "sunrise", + "sinner", + "jojo", + "megapass", + "martini", + "assfuck", + "grateful", + "ffffff", + "abigail", + "esther", + "mushroom", + "janice", + "jamaica", + "wright", + "sims", + "space", + "there", + "timmy", + "7654321", + "77777", + "cccccc", + "gizmodo", + "roxanne", + "ralph", + "tractor", + "cristina", + "dance", + "mypass", + "hongkong", + "helena", + "1975", + "blue123", + "pissing", + "thomas1", + "redred", + "rich", + "basketball", + "attack", + "cash", + "satan666", + "drunk", + "dixie", + "dublin", + "bollox", + "kingkong", + "katrina", + "miles", + "1971", + "22222", + "272727", + "sexx", + "penelope", + "thompson", + "anything", + "bbbb", + "battle", + "grizzly", + "passat", + "porter", + "tracy", + "defiant", + "bowler", + "knickers", + "monitor", + "wisdom", + "wild", + "slappy", + "thor", + "letsgo", + "robert1", + "feet", + "rush", + "brownie", + "hudson", + "98765", + "playing", + "playtime", + "lightnin", + "melvin", + "atomic", + "bart", + "hawk", + "goku", + "glory", + "llllll", + "qwaszx", + "cosmos", + "bosco", + "knights", + "bentley", + "beast", + "slapshot", + "lewis", + "assword", + "frosty", + "gillian", + "sara", + "dumbass", + "mallard", + "dddd", + "deanna", + "elwood", + "wally", + "159357", + "titleist", + "angelo", + "aussie", + "guest", + "golfing", + "doobie", + "loveit", + "chloe", + "elliott", + "werewolf", + "vipers", + "janine", + "1965", + "blabla", + "surf", + "sucking", + "tardis", + "serena", + "shelley", + "thegame", + "legion", + "rebels", + "fernando", + "fast", + "gerald", + "sarah1", + "double", + "onelove", + "loulou", + "toto", + "crash", + "blackcat", + "7", + "tacobell", + "soccer1", + "jedi", + "manuel", + "method", + "river", + "chase", + "ludwig", + "poopie", + "derrick", + "boob", + "breast", + "kittycat", + "isabel", + "belly", + "pikachu", + "thunder1", + "thankyou", + "jose", + "celeste", + "celtics", + "frances", + "frogger", + "scoobydo", + "sabbath", + "coltrane", + "budman", + "willis", + "jackal", + "bigger", + "zzzzz", + "silvia", + "sooner", + "licking", + "gopher", + "geheim", + "lonestar", + "primus", + "pooper", + "newpass", + "brasil", + "heather1", + "husker", + "element", + "moomoo", + "beefcake", + "zzzzzzzz", + "tammy", + "shitty", + "smokin", + "personal", + "jjjj", + "anthony1", + "anubis", + "backup", + "gorilla", + "fuckface", + "painter", + "lowrider", + "punkrock", + "traffic", + "claude", + "daniela", + "dale", + "delta1", + "nancy", + "boys", + "easy", + "kissing", + "kelley", + "wendy", + "theresa", + "amazon", + "alan", + "fatass", + "dodgeram", + "dingdong", + "malcolm", + "qqqqqqqq", + "breasts", + "boots", + "honda1", + "spidey", + "poker", + "temp", + "johnjohn", + "miguel", + "147852", + "archer", + "asshole1", + "dogdog", + "tricky", + "crusader", + "weather", + "syracuse", + "spankme", + "speaker", + "meridian", + "amadeus", + "back", + "harley1", + "falcons", + "dorothy", + "turkey50", + "kenwood", + "keyboard", + "ilovesex", + "1978", + "blackman", + "shazam", + "shalom", + "lickit", + "jimbob", + "richmond", + "roller", + "carson", + "check", + "fatman", + "funny", + "garbage", + "sandiego", + "loving", + "magnus", + "cooldude", + "clover", + "mobile", + "bell", + "payton", + "plumber", + "texas1", + "tool", + "topper", + "jenna", + "mariners", + "rebel", + "harmony", + "caliente", + "celica", + "fletcher", + "german", + "diana", + "oxford", + "osiris", + "orgasm", + "punkin", + "porsche9", + "tuesday", + "close", + "breeze", + "bossman", + "kangaroo", + "billie", + "latinas", + "judith", + "astros", + "scruffy", + "donna", + "qwertyu", + "davis", + "hearts", + "kathy", + "jammer", + "java", + "springer", + "rhonda", + "ricky", + "1122", + "goodtime", + "chelsea1", + "freckles", + "flyboy", + "doodle", + "city", + "nebraska", + "bootie", + "kicker", + "webmaster", + "vulcan", + "iverson", + "191919", + "blueeyes", + "stoner", + "321321", + "farside", + "rugby", + "director", + "pussy69", + "power1", + "bobbie", + "hershey", + "hermes", + "monopoly", + "west", + "birdman", + "blessed", + "blackjac", + "southern", + "peterpan", + "thumbs", + "lawyer", + "melinda", + "fingers", + "fuckyou1", + "rrrrrr", + "a1b2c3d4", + "coke", + "nicola", + "bohica", + "heart", + "elvis1", + "kids", + "blacky", + "stories", + "sentinel", + "snake1", + "phoebe", + "jesse", + "richard1", + "1234abcd", + "guardian", + "candyman", + "fisting", + "scarlet", + "dildo", + "pancho", + "mandingo", + "lucky7", + "condom", + "munchkin", + "billyboy", + "summer1", + "student", + "sword", + "skiing", + "sergio", + "site", + "sony", + "thong", + "rootbeer", + "assassin", + "cassidy", + "frederic", + "fffff", + "fitness", + "giovanni", + "scarlett", + "durango", + "postal", + "achilles", + "dawn", + "dylan", + "kisses", + "warriors", + "imagine", + "plymouth", + "topdog", + "asterix", + "hallo", + "cameltoe", + "fuckfuck", + "bridget", + "eeeeee", + "mouth", + "weird", + "will", + "sithlord", + "sommer", + "toby", + "theking", + "juliet", + "avenger", + "backdoor", + "goodbye", + "chevrole", + "faith", + "lorraine", + "trance", + "cosworth", + "brad", + "houses", + "homers", + "eternity", + "kingpin", + "verbatim", + "incubus", + "1961", + "blond", + "zaphod", + "shiloh", + "spurs", + "station", + "jennie", + "maynard", + "mighty", + "aliens", + "hank", + "charly", + "running", + "dogman", + "omega1", + "printer", + "aggies", + "chocolate", + "deadhead", + "hope", + "javier", + "bitch1", + "stone55", + "pineappl", + "thekid", + "lizzie", + "rockets", + "ashton", + "camels", + "formula", + "forrest", + "rosemary", + "oracle", + "rain", + "pussey", + "porkchop", + "abcde", + "clancy", + "nellie", + "mystic", + "inferno", + "blackdog", + "steve1", + "pauline", + "alexander", + "alice", + "alfa", + "grumpy", + "flames", + "scream", + "lonely", + "puffy", + "proxy", + "valhalla", + "unreal", + "cynthia", + "herbie", + "engage", + "yyyyyy", + "10101", + "solomon", + "pistol", + "melody", + "celeb", + "flying", + "gggg", + "santiago", + "scottie", + "oakley", + "portugal", + "a12345", + "newbie", + "mmmm", + "venus", + "1qazxsw2", + "beverly", + "zorro", + "work", + "writer", + "stripper", + "sebastia", + "spread", + "phil", + "tobias", + "links", + "members", + "metal", + "1221", + "andre", + "565656", + "funfun", + "trojans", + "again", + "cyber", + "hurrican", + "moneys", + "1x2zkg8w", + "zeus", + "thing", + "tomato", + "lion", + "atlantic", + "celine", + "usa123", + "trans", + "account", + "aaaaaaa", + "homerun", + "hyperion", + "kevin1", + "blacks", + "44444444", + "skittles", + "sean", + "hastings", + "fart", + "gangbang", + "fubar", + "sailboat", + "older", + "oilers", + "craig", + "conrad", + "church", + "damian", + "dean", + "broken", + "buster1", + "hithere", + "immortal", + "sticks", + "pilot", + "peters", + "lexmark", + "jerkoff", + "maryland", + "anders", + "cheers", + "possum", + "columbus", + "cutter", + "muppet", + "beautiful", + "stolen", + "swordfish", + "sport", + "sonic", + "peter1", + "jethro", + "rockon", + "asdfghj", + "pass123", + "paper", + "pornos", + "ncc1701a", + "bootys", + "buttman", + "bonjour", + "escape", + "1960", + "becky", + "bears", + "362436", + "spartans", + "tinman", + "threesom", + "lemons", + "maxmax", + "1414", + "bbbbb", + "camelot", + "chad", + "chewie", + "gogo", + "fusion", + "saint", + "dilligaf", + "nopass", + "myself", + "hustler", + "hunter1", + "whitey", + "beast1", + "yesyes", + "spank", + "smudge", + "pinkfloy", + "patriot", + "lespaul", + "annette", + "hammers", + "catalina", + "finish", + "formula1", + "sausage", + "scooter1", + "orioles", + "oscar1", + "over", + "colombia", + "cramps", + "natural", + "eating", + "exotic", + "iguana", + "bella", + "suckers", + "strong", + "sheena", + "start", + "slave", + "pearl", + "topcat", + "lancelot", + "angelica", + "magelan", + "racer", + "ramona", + "crunch", + "british", + "button", + "eileen", + "steph", + "456123", + "skinny", + "seeking", + "rockhard", + "chief", + "filter", + "first", + "freaks", + "sakura", + "pacman", + "poontang", + "dalton", + "newlife", + "homer1", + "klingon", + "watcher", + "walleye", + "tasha", + "tasty", + "sinatra", + "starship", + "steel", + "starbuck", + "poncho", + "amber1", + "gonzo", + "grover", + "catherin", + "carol", + "candle", + "firefly", + "goblin", + "scotch", + "diver", + "usmc", + "huskies", + "eleven", + "kentucky", + "kitkat", + "israel", + "beckham", + "bicycle", + "yourmom", + "studio", + "tara", + "33333333", + "shane", + "splash", + "jimmy1", + "reality", + "12344321", + "caitlin", + "focus", + "sapphire", + "mailman", + "raiders1", + "clark", + "ddddd", + "hopper", + "excalibu", + "more", + "wilbur", + "illini", + "imperial", + "phillips", + "lansing", + "maxx", + "gothic", + "golfball", + "carlton", + "camille", + "facial", + "front242", + "macdaddy", + "qwer1234", + "vectra", + "cowboys1", + "crazy1", + "dannyboy", + "jane", + "betty", + "benny", + "bennett", + "leader", + "martinez", + "aquarius", + "barkley", + "hayden", + "caught", + "franky", + "ffff", + "floyd", + "sassy", + "pppp", + "pppppppp", + "prodigy", + "clarence", + "noodle", + "eatpussy", + "vortex", + "wanking", + "beatrice", + "billy1", + "siemens", + "pedro", + "phillies", + "research", + "groups", + "carolyn", + "chevy1", + "cccc", + "fritz", + "gggggggg", + "doughboy", + "dracula", + "nurses", + "loco", + "madrid", + "lollipop", + "trout", + "utopia", + "chrono", + "cooler", + "conner", + "nevada", + "wibble", + "werner", + "summit", + "marco", + "marilyn", + "1225", + "babies", + "capone", + "fugazi", + "panda", + "mama", + "qazwsxed", + "puppies", + "triton", + "9876", + "command", + "nnnnnn", + "ernest", + "momoney", + "iforgot", + "wolfie", + "studly", + "shawn", + "renee", + "alien", + "hamburg", + "81fukkc", + "741852", + "catman", + "china", + "forgot", + "gagging", + "scott1", + "drew", + "oregon", + "qweqwe", + "train", + "crazybab", + "daniel1", + "cutlass", + "brothers", + "holes", + "heidi", + "mothers", + "music1", + "what", + "walrus", + "1957", + "bigtime", + "bike", + "xtreme", + "simba", + "ssss", + "rookie", + "angie", + "bathing", + "fresh", + "sanchez", + "rotten", + "maestro", + "luis", + "look", + "turbo1", + "99999", + "butthole", + "hhhh", + "elijah", + "monty", + "bender", + "yoda", + "shania", + "shock", + "phish", + "thecat", + "rightnow", + "reagan", + "baddog", + "asia", + "greatone", + "gateway1", + "randall", + "abstr", + "napster", + "brian1", + "bogart", + "high", + "hitler", + "emma", + "kill", + "weaver", + "wildfire", + "jackson1", + "isaiah", + "1981", + "belinda", + "beaner", + "yoyo", + "0.0.0.000", + "super1", + "select", + "snuggles", + "slutty", + "some", + "phoenix1", + "technics", + "toon", + "raven1", + "rayray", + "123789", + "1066", + "albion", + "greens", + "fashion", + "gesperrt", + "santana", + "paint", + "powell", + "credit", + "darling", + "mystery", + "bowser", + "bottle", + "brucelee", + "hehehe", + "kelly1", + "mojo", + "1998", + "bikini", + "woofwoof", + "yyyy", + "strap", + "sites", + "spears", + "theodore", + "julius", + "richards", + "amelia", + "central", + "f**k", + "nyjets", + "punisher", + "username", + "vanilla", + "twisted", + "bryant", + "brent", + "bunghole", + "here", + "elizabeth", + "erica", + "kimber", + "viagra", + "veritas", + "pony", + "pool", + "titts", + "labtec", + "lifetime", + "jenny1", + "masterbate", + "mayhem", + "redbull", + "govols", + "gremlin", + "505050", + "gmoney", + "rupert", + "rovers", + "diamond1", + "lorenzo", + "trident", + "abnormal", + "davidson", + "deskjet", + "cuddles", + "nice", + "bristol", + "karina", + "milano", + "vh5150", + "jarhead", + "1982", + "bigbird", + "bizkit", + "sixers", + "slider", + "star69", + "starfish", + "penetration", + "tommy1", + "john316", + "meghan", + "michaela", + "market", + "grant", + "caligula", + "carl", + "flicks", + "films", + "madden", + "railroad", + "cosmo", + "cthulhu", + "bradford", + "br0d3r", + "military", + "bearbear", + "swedish", + "spawn", + "patrick1", + "polly", + "these", + "todd", + "reds", + "anarchy", + "groove", + "franco", + "fuckher", + "oooo", + "tyrone", + "vegas", + "airbus", + "cobra1", + "christine", + "clips", + "delete", + "duster", + "kitty1", + "mouse1", + "monkeys", + "jazzman", + "1919", + "262626", + "swinging", + "stroke", + "stocks", + "sting", + "pippen", + "labrador", + "jordan1", + "justdoit", + "meatball", + "females", + "saturday", + "park", + "vector", + "cooter", + "defender", + "desert", + "demon", + "nike", + "bubbas", + "bonkers", + "english", + "kahuna", + "wildman", + "4121", + "sirius", + "static", + "piercing", + "terror", + "teenage", + "leelee", + "marissa", + "microsof", + "mechanic", + "robotech", + "rated", + "hailey", + "chaser", + "sanders", + "salsero", + "nuts", + "macross", + "quantum", + "rachael", + "tsunami", + "universe", + "daddy1", + "cruise", + "nguyen", + "newpass6", + "nudes", + "hellyeah", + "vernon", + "1959", + "zaq12wsx", + "striker", + "sixty", + "steele", + "spice", + "spectrum", + "smegma", + "thumb", + "jjjjjjjj", + "mellow", + "astrid", + "cancun", + "cartoon", + "sabres", + "samiam", + "pants", + "oranges", + "oklahoma", + "lust", + "coleman", + "denali", + "nude", + "noodles", + "buzz", + "brest", + "hooter", + "mmmmmmmm", + "warthog", + "bloody", + "blueblue", + "zappa", + "wolverine", + "sniffing", + "lance", + "jean", + "jjjjj", + "harper", + "calico", + "freee", + "rover", + "door", + "pooter", + "closeup", + "bonsai", + "evelyn", + "emily1", + "kathryn", + "keystone", + "iiii", + "1955", + "yzerman", + "theboss", + "tolkien", + "jill", + "megaman", + "rasta", + "bbbbbbbb", + "bean", + "handsome", + "hal9000", + "goofy", + "gringo", + "gofish", + "gizmo1", + "samsam", + "scuba", + "onlyme", + "tttttttt", + "corrado", + "clown", + "clapton", + "deborah", + "boris", + "bulls", + "vivian", + "jayhawk", + "bethany", + "wwww", + "sharky", + "seeker", + "ssssssss", + "somethin", + "pillow", + "thesims", + "lighter", + "lkjhgf", + "melissa1", + "marcius2", + "barry", + "guiness", + "gymnast", + "casey1", + "goalie", + "godsmack", + "doug", + "lolo", + "rangers1", + "poppy", + "abby", + "clemson", + "clipper", + "deeznuts", + "nobody", + "holly1", + "elliot", + "eeee", + "kingston", + "miriam", + "belle", + "yosemite", + "sucked", + "sex123", + "sexy69", + "pic's", + "tommyboy", + "lamont", + "meat", + "masterbating", + "marianne", + "marc", + "gretzky", + "happyday", + "frisco", + "scratch", + "orchid", + "orange1", + "manchest", + "quincy", + "unbelievable", + "aberdeen", + "dawson", + "nathalie", + "ne1469", + "boxing", + "hill", + "korn", + "intercourse", + "161616", + "1985", + "ziggy", + "supersta", + "stoney", + "senior", + "amature", + "barber", + "babyboy", + "bcfields", + "goliath", + "hack", + "hardrock", + "children", + "frodo", + "scout", + "scrappy", + "rosie", + "qazqaz", + "tracker", + "active", + "craving", + "commando", + "cohiba", + "deep", + "cyclone", + "dana", + "bubba69", + "katie1", + "mpegs", + "vsegda", + "jade", + "irish1", + "better", + "sexy1", + "sinclair", + "smelly", + "squerting", + "lions", + "jokers", + "jeanette", + "julia", + "jojojo", + "meathead", + "ashley1", + "groucho", + "cheetah", + "champ", + "firefox", + "gandalf1", + "packer", + "magnolia", + "love69", + "tyler1", + "typhoon", + "tundra", + "bobby1", + "kenworth", + "village", + "volley", + "beth", + "wolf359", + "420", + "7", + "swimmer", + "skydive", + "smokes", + "patty", + "peugeot", + "pompey", + "legolas", + "kristy", + "redhot", + "rodman", + "redalert", + "having", + "grapes", + "4runner", + "carrera", + "floppy", + "dollars", + "ou8122", + "quattro", + "adams", + "cloud9", + "davids", + "nofear", + "busty", + "homemade", + "mmmmm", + "whisper", + "vermont", + "webmaste", + "wives", + "insertion", + "jayjay", + "philips", + "phone", + "topher", + "tongue", + "temptress", + "midget", + "ripken", + "havefun", + "gretchen", + "canon", + "celebrity", + "five", + "getting", + "ghetto", + "direct", + "otto", + "ragnarok", + "trinidad", + "usnavy", + "conover", + "cruiser", + "dalshe", + "nicole1", + "buzzard", + "hottest", + "kingfish", + "misfit", + "moore", + "milfnew", + "warlord", + "wassup", + "bigsexy", + "blackhaw", + "zippy", + "shearer", + "tights", + "thursday", + "kungfu", + "labia", + "journey", + "meatloaf", + "marlene", + "rider", + "area51", + "batman1", + "bananas", + "636363", + "cancel", + "ggggg", + "paradox", + "mack", + "lynn", + "queens", + "adults", + "aikido", + "cigars", + "nova", + "hoosier", + "eeyore", + "moose1", + "warez", + "interacial", + "streaming", + "313131", + "pertinant", + "pool6123", + "mayday", + "rivers", + "revenge", + "animated", + "banker", + "baddest", + "gordon24", + "ccccc", + "fortune", + "fantasies", + "touching", + "aisan", + "deadman", + "homepage", + "ejaculation", + "whocares", + "iscool", + "jamesbon", + "1956", + "1pussy", + "womam", + "sweden", + "skidoo", + "spock", + "sssss", + "petra", + "pepper1", + "pinhead", + "micron", + "allsop", + "amsterda", + "army", + "aside", + "gunnar", + "666999", + "chip", + "foot", + "fowler", + "february", + "face", + "fletch", + "george1", + "sapper", + "science", + "sasha1", + "luckydog", + "lover1", + "magick", + "popopo", + "public", + "ultima", + "derek", + "cypress", + "booker", + "businessbabe", + "brandon1", + "edwards", + "experience", + "vulva", + "vvvv", + "jabroni", + "bigbear", + "yummy", + "10203", + "searay", + "secret1", + "showing", + "sinbad", + "sexxxx", + "soleil", + "software", + "piccolo", + "thirteen", + "leopard", + "legacy", + "jensen", + "justine", + "memorex", + "marisa", + "mathew", + "redwing", + "rasputin", + "134679", + "anfield", + "greenbay", + "gore", + "catcat", + "feather", + "scanner", + "pa55word", + "contortionist", + "danzig", + "daisy1", + "hores", + "erik", + "exodus", + "vinnie", + "iiiiii", + "zero", + "1001", + "subway", + "tank", + "second", + "snapple", + "sneakers", + "sonyfuck", + "picks", + "poodle", + "test1234", + "their", + "llll", + "junebug", + "june", + "marker", + "mellon", + "ronaldo", + "roadkill", + "amanda1", + "asdfjkl", + "beaches", + "greene", + "great1", + "cheerleaers", + "force", + "doitnow", + "ozzy", + "madeline", + "radio", + "tyson", + "christian", + "daphne", + "boxster", + "brighton", + "housewifes", + "emmanuel", + "emerson", + "kkkk", + "mnbvcx", + "moocow", + "vides", + "wagner", + "janet", + "1717", + "bigmoney", + "blonds", + "1000", + "storys", + "stereo", + "4545", + "420247", + "seductive", + "sexygirl", + "lesbean", + "live", + "justin1", + "124578", + "animals", + "balance", + "hansen", + "cabbage", + "canadian", + "gangbanged", + "dodge1", + "dimas", + "lori", + "loud", + "malaka", + "puss", + "probes", + "adriana", + "coolman", + "crawford", + "dante", + "nacked", + "hotpussy", + "erotica", + "kool", + "mirror", + "wearing", + "implants", + "intruder", + "bigass", + "zenith", + "woohoo", + "womans", + "tanya", + "tango", + "stacy", + "pisces", + "laguna", + "krystal", + "maxell", + "andyod22", + "barcelon", + "chainsaw", + "chickens", + "flash1", + "downtown", + "orgasms", + "magicman", + "profit", + "pusyy", + "pothead", + "coconut", + "chuckie", + "contact", + "clevelan", + "designer", + "builder", + "budweise", + "hotshot", + "horizon", + "hole", + "experienced", + "mondeo", + "wifes", + "1962", + "strange", + "stumpy", + "smiths", + "sparks", + "slacker", + "piper", + "pitchers", + "passwords", + "laptop", + "jeremiah", + "allmine", + "alliance", + "bbbbbbb", + "asscock", + "halflife", + "grandma", + "hayley", + "88888", + "cecilia", + "chacha", + "saratoga", + "sandy1", + "santos", + "doogie", + "number", + "positive", + "qwert40", + "transexual", + "crow", + "close-up", + "darrell", + "bonita", + "ib6ub9", + "volvo", + "jacob1", + "iiiii", + "beastie", + "sunnyday", + "stoned", + "sonics", + "starfire", + "snapon", + "pictuers", + "pepe", + "testing1", + "tiberius", + "lisalisa", + "lesbain", + "litle", + "retard", + "ripple", + "austin1", + "badgirl", + "golfgolf", + "flounder", + "garage", + "royals", + "dragoon", + "dickie", + "passwor", + "ocean", + "majestic", + "poppop", + "trailers", + "dammit", + "nokia", + "bobobo", + "br549", + "emmitt", + "knock", + "minime", + "mikemike", + "whitesox", + "1954", + "3232", + "353535", + "seamus", + "solo", + "sparkle", + "sluttey", + "pictere", + "titten", + "lback", + "1024", + "angelina", + "goodluck", + "charlton", + "fingerig", + "gallaries", + "goat", + "ruby", + "passme", + "oasis", + "lockerroom", + "logan1", + "rainman", + "twins", + "treasure", + "absolutely", + "club", + "custom", + "cyclops", + "nipper", + "bucket", + "homepage-", + "hhhhh", + "momsuck", + "indain", + "2345", + "beerbeer", + "bimmer", + "susanne", + "stunner", + "stevens", + "456456", + "shell", + "sheba", + "tootsie", + "tiny", + "testerer", + "reefer", + "really", + "1012", + "harcore", + "gollum", + "545454", + "chico", + "caveman", + "carole", + "fordf150", + "fishes", + "gaymen", + "saleen", + "doodoo", + "pa55w0rd", + "looney", + "presto", + "qqqqq", + "cigar", + "bogey", + "brewer", + "helloo", + "dutch", + "kamikaze", + "monte", + "wasser", + "vietnam", + "visa", + "japanees", + "123", + "swords", + "slapper", + "peach", + "jump", + "marvel", + "masterbaiting", + "march", + "redwood", + "rolling", + "1005", + "ametuer", + "chiks", + "cathy", + "callaway", + "fucing", + "sadie1", + "panasoni", + "mamas", + "race", + "rambo", + "unknown", + "absolut", + "deacon", + "dallas1", + "housewife", + "kristi", + "keywest", + "kirsten", + "kipper", + "morning", + "wings", + "idiot", + "18436572", + "1515", + "beating", + "zxczxc", + "sullivan", + "303030", + "shaman", + "sparrow", + "terrapin", + "jeffery", + "masturbation", + "mick", + "redfish", + "1492", + "angus", + "barrett", + "goirish", + "hardcock", + "felicia", + "forfun", + "galary", + "freeporn", + "duchess", + "olivier", + "lotus", + "pornographic", + "ramses", + "purdue", + "traveler", + "crave", + "brando", + "enter1", + "killme", + "moneyman", + "welder", + "windsor", + "wifey", + "indon", + "yyyyy", + "stretch", + "taylor1", + "4417", + "shopping", + "picher", + "pickup", + "thumbnils", + "johnboy", + "jets", + "jess", + "maureen", + "anne", + "ameteur", + "amateurs", + "apollo13", + "hambone", + "goldwing", + "5050", + "charley", + "sally1", + "doghouse", + "padres", + "pounding", + "quest", + "truelove", + "underdog", + "trader", + "crack", + "climber", + "bolitas", + "bravo", + "hohoho", + "model", + "italian", + "beanie", + "beretta", + "wrestlin", + "stroker", + "tabitha", + "sherwood", + "sexyman", + "jewels", + "johannes", + "mets", + "marcos", + "rhino", + "bdsm", + "balloons", + "goodman", + "grils", + "happy123", + "flamingo", + "games", + "route66", + "devo", + "dino", + "outkast", + "paintbal", + "magpie", + "llllllll", + "twilight", + "critter", + "christie", + "cupcake", + "nickel", + "bullseye", + "krista", + "knickerless", + "mimi", + "murder", + "videoes", + "binladen", + "xerxes", + "slim", + "slinky", + "pinky", + "peterson", + "thanatos", + "meister", + "menace", + "ripley", + "retired", + "albatros", + "balloon", + "bank", + "goten", + "5551212", + "getsdown", + "donuts", + "divorce", + "nwo4life", + "lord", + "lost", + "underwear", + "tttt", + "comet", + "deer", + "damnit", + "dddddddd", + "deeznutz", + "nasty1", + "nonono", + "nina", + "enterprise", + "eeeee", + "misfit99", + "milkman", + "vvvvvv", + "isaac", + "1818", + "blueboy", + "beans", + "bigbutt", + "wyatt", + "tech", + "solution", + "poetry", + "toolman", + "laurel", + "juggalo", + "jetski", + "meredith", + "barefoot", + "50spanks", + "gobears", + "scandinavian", + "original", + "truman", + "cubbies", + "nitram", + "briana", + "ebony", + "kings", + "warner", + "bilbo", + "yumyum", + "zzzzzzz", + "stylus", + "321654", + "shannon1", + "server", + "secure", + "silly", + "squash", + "starman", + "steeler", + "staples", + "phrases", + "techniques", + "laser", + "135790", + "allan", + "barker", + "athens", + "cbr600", + "chemical", + "fester", + "gangsta", + "fucku2", + "freeze", + "game", + "salvador", + "droopy", + "objects", + "passwd", + "lllll", + "loaded", + "louis", + "manchester", + "losers", + "vedder", + "clit", + "chunky", + "darkman", + "damage", + "buckshot", + "buddah", + "boobed", + "henti", + "hillary", + "webber", + "winter1", + "ingrid", + "bigmike", + "beta", + "zidane", + "talon", + "slave1", + "pissoff", + "person", + "thegreat", + "living", + "lexus", + "matador", + "readers", + "riley", + "roberta", + "armani", + "ashlee", + "goldstar", + "5656", + "cards", + "fmale", + "ferris", + "fuking", + "gaston", + "fucku", + "ggggggg", + "sauron", + "diggler", + "pacers", + "looser", + "pounded", + "premier", + "pulled", + "town", + "trisha", + "triangle", + "cornell", + "collin", + "cosmic", + "deeper", + "depeche", + "norway", + "bright", + "helmet", + "kristine", + "kendall", + "mustard", + "misty1", + "watch", + "jagger", + "bertie", + "berger", + "word", + "3x7pxr", + "silver1", + "smoking", + "snowboar", + "sonny", + "paula", + "penetrating", + "photoes", + "lesbens", + "lambert", + "lindros", + "lillian", + "roadking", + "rockford", + "1357", + "143143", + "asasas", + "goodboy", + "898989", + "chicago1", + "card", + "ferrari1", + "galeries", + "godfathe", + "gawker", + "gargoyle", + "gangster", + "rubble", + "rrrr", + "onetime", + "pussyman", + "pooppoop", + "trapper", + "twenty", + "abraham", + "cinder", + "company", + "newcastl", + "boricua", + "bunny1", + "boxer", + "hotred", + "hockey1", + "hooper", + "edward1", + "evan", + "kris", + "misery", + "moscow", + "milk", + "mortgage", + "bigtit", + "show", + "snoopdog", + "three", + "lionel", + "leanne", + "joshua1", + "july", + "1230", + "assholes", + "cedric", + "fallen", + "farley", + "gene", + "frisky", + "sanity", + "script", + "divine", + "dharma", + "lucky13", + "property", + "tricia", + "akira", + "desiree", + "broadway", + "butterfly", + "hunt", + "hotbox", + "hootie", + "heat", + "howdy", + "earthlink", + "karma", + "kiteboy", + "motley", + "westwood", + "1988", + "bert", + "blackbir", + "biggles", + "wrench", + "working", + "wrestle", + "slippery", + "pheonix", + "penny1", + "pianoman", + "tomorrow", + "thedude", + "jenn", + "jonjon", + "jones1", + "mattie", + "memory", + "micheal", + "roadrunn", + "arrow", + "attitude", + "azzer", + "seahawks", + "diehard", + "dotcom", + "lola", + "tunafish", + "chivas", + "cinnamon", + "clouds", + "deluxe", + "northern", + "nuclear", + "north", + "boom", + "boobie", + "hurley", + "krishna", + "momomo", + "modles", + "volume", + "23232323", + "bluedog", + "wwwwwww", + "zerocool", + "yousuck", + "pluto", + "limewire", + "link", + "joung", + "marcia", + "awnyce", + "gonavy", + "haha", + "films+pic+galeries", + "fabian", + "francois", + "girsl", + "fuckthis", + "girfriend", + "rufus", + "drive", + "uncencored", + "a123456", + "airport", + "clay", + "chrisbln", + "combat", + "cygnus", + "cupoi", + "never", + "netscape", + "brett", + "hhhhhhhh", + "eagles1", + "elite", + "knockers", + "kendra", + "mommy", + "1958", + "tazmania", + "shonuf", + "piano", + "pharmacy", + "thedog", + "lips", + "jillian", + "jenkins", + "midway", + "arsenal1", + "anaconda", + "australi", + "gromit", + "gotohell", + "787878", + "66666", + "carmex2", + "camber", + "gator1", + "ginger1", + "fuzzy", + "seadoo", + "dorian", + "lovesex", + "rancid", + "uuuuuu", + "911911", + "nature", + "bulldog1", + "helen", + "health", + "heater", + "higgins", + "kirk", + "monalisa", + "mmmmmmm", + "whiteout", + "virtual", + "ventura", + "jamie1", + "japanes", + "james007", + "2727", + "2469", + "blam", + "bitchass", + "believe", + "zephyr", + "stiffy", + "sweet1", + "silent", + "southpar", + "spectre", + "tigger1", + "tekken", + "lenny", + "lakota", + "lionking", + "jjjjjjj", + "medical", + "megatron", + "1369", + "hawaiian", + "gymnastic", + "golfer1", + "gunners", + "7779311", + "515151", + "famous", + "glass", + "screen", + "rudy", + "royal", + "sanfran", + "drake", + "optimus", + "panther1", + "love1", + "mail", + "maggie1", + "pudding", + "venice", + "aaron1", + "delphi", + "niceass", + "bounce", + "busted", + "house1", + "killer1", + "miracle", + "momo", + "musashi", + "jammin", + "2003", + "234567", + "wp2003wp", + "submit", + "silence", + "sssssss", + "state", + "spikes", + "sleeper", + "passwort", + "toledo", + "kume", + "media", + "meme", + "medusa", + "mantis", + "remote", + "reading", + "reebok", + "1017", + "artemis", + "hampton", + "harry1", + "cafc91", + "fettish", + "friendly", + "oceans", + "oooooooo", + "mango", + "ppppp", + "trainer", + "troy", + "uuuu", + "909090", + "cross", + "death1", + "news", + "bullfrog", + "hokies", + "holyshit", + "eeeeeee", + "mitch", + "jasmine1", + "&", + "&", + "sergeant", + "spinner", + "leon", + "jockey", + "records", + "right", + "babyblue", + "hans", + "gooner", + "474747", + "cheeks", + "cars", + "candice", + "fight", + "glow", + "pass1234", + "parola", + "okokok", + "pablo", + "magical", + "major", + "ramsey", + "poseidon", + "989898", + "confused", + "circle", + "crusher", + "cubswin", + "nnnn", + "hollywood", + "erin", + "kotaku", + "milo", + "mittens", + "whatsup", + "vvvvv", + "iomega", + "insertions", + "bengals", + "bermuda", + "biit", + "yellow1", + "12345", + "spike1", + "south", + "sowhat", + "pitures", + "peacock", + "pecker", + "theend", + "juliette", + "jimmie", + "romance", + "augusta", + "hayabusa", + "hawkeyes", + "castro", + "florian", + "geoffrey", + "dolly", + "lulu", + "qaz123", + "usarmy", + "twinkle", + "cloud", + "chuckles", + "cold", + "hounddog", + "hover", + "hothot", + "europa", + "ernie", + "kenshin", + "kojak", + "mikey1", + "water1", + "196969", + "because", + "wraith", + "zebra", + "wwwww", + "33333", + "simon1", + "spider1", + "snuffy", + "philippe", + "thunderb", + "teddy1", + "lesley", + "marino13", + "maria1", + "redline", + "renault", + "aloha", + "antoine", + "handyman", + "cerberus", + "gamecock", + "gobucks", + "freesex", + "duffman", + "ooooo", + "papa", + "nuggets", + "magician", + "longbow", + "preacher", + "porno1", + "county", + "chrysler", + "contains", + "dalejr", + "darius", + "darlene", + "dell", + "navy", + "buffy1", + "hedgehog", + "hoosiers", + "honey1", + "hott", + "heyhey", + "europe", + "dutchess", + "everest", + "wareagle", + "ihateyou", + "sunflowe", + "3434", + "senators", + "shag", + "spoon", + "sonoma", + "stalker", + "poochie", + "terminal", + "terefon", + "laurence", + "maradona", + "maryann", + "marty", + "roman", + "1007", + "142536", + "alibaba", + "america1", + "bartman", + "astro", + "goth", + "century", + "chicken1", + "cheater", + "four", + "ghost1", + "passpass", + "oral", + "r2d2c3po", + "civic", + "cicero", + "myxworld", + "kkkkk", + "missouri", + "wishbone", + "infiniti", + "jameson", + "1a2b3c", + "1qwerty", + "wonderboy", + "skip", + "shojou", + "stanford", + "sparky1", + "smeghead", + "poiuy", + "titanium", + "torres", + "lantern", + "jelly", + "jeanne", + "meier", + "1213", + "bayern", + "basset", + "gsxr750", + "cattle", + "charlene", + "fishing1", + "fullmoon", + "gilles", + "dima", + "obelix", + "popo", + "prissy", + "ramrod", + "unique", + "absolute", + "bummer", + "hotone", + "dynasty", + "entry", + "konyor", + "missy1", + "moses", + "282828", + "yeah", + "xyz123", + "stop", + "426hemi", + "404040", + "seinfeld", + "simmons", + "pingpong", + "lazarus", + "matthews", + "marine1", + "manning", + "recovery", + "12345a", + "beamer", + "babyface", + "greece", + "gustav", + "7007", + "charity", + "camilla", + "ccccccc", + "faggot", + "foxy", + "frozen", + "gladiato", + "duckie", + "dogfood", + "paranoid", + "packers1", + "longjohn", + "radical", + "tuna", + "clarinet", + "claudio", + "circus", + "danny1", + "novell", + "nights", + "bonbon", + "kashmir", + "kiki", + "mortimer", + "modelsne", + "moondog", + "monaco", + "vladimir", + "insert", + "1953", + "zxc123", + "supreme", + "3131", + "sexxx", + "selena", + "softail", + "poipoi", + "pong", + "together", + "mars", + "martin1", + "rogue", + "alone", + "avalanch", + "audia4", + "55bgates", + "cccccccc", + "chick", + "came11", + "figaro", + "geneva", + "dogboy", + "dnsadm", + "dipshit", + "paradigm", + "othello", + "operator", + "officer", + "malone", + "post", + "rafael", + "valencia", + "tripod", + "choice", + "chopin", + "coucou", + "coach", + "cocksuck", + "common", + "creature", + "borussia", + "book", + "browning", + "heritage", + "hiziad", + "homerj", + "eight", + "earth", + "millions", + "mullet", + "whisky", + "jacques", + "store", + "4242", + "speedo", + "starcraf", + "skylar", + "spaceman", + "piggy", + "pierce", + "tiger2", + "legos", + "lala", + "jezebel", + "judy", + "joker1", + "mazda", + "barton", + "baker", + "727272", + "chester1", + "fishman", + "food", + "rrrrrrrr", + "sandwich", + "dundee", + "lumber", + "magazine", + "radar", + "ppppppp", + "tranny", + "aaliyah", + "admiral", + "comics", + "cleo", + "delight", + "buttfuck", + "homeboy", + "eternal", + "kilroy", + "kellie", + "khan", + "violin", + "wingman", + "walmart", + "bigblue", + "blaze", + "beemer", + "beowulf", + "bigfish", + "yyyyyyy", + "woodie", + "yeahbaby", + "123456", + "tbone", + "style", + "syzygy", + "starter", + "lemon", + "linda1", + "merlot", + "mexican", + "11235813", + "anita", + "banner", + "bangbang", + "badman", + "barfly", + "grease", + "carla", + "charles1", + "ffffffff", + "screw", + "doberman", + "diane", + "dogshit", + "overkill", + "counter", + "coolguy", + "claymore", + "demons", + "demo", + "nomore", + "normal", + "brewster", + "hhhhhhh", + "hondas", + "iamgod", + "enterme", + "everett", + "electron", + "eastside", + "kayla", + "minimoni", + "mybaby", + "wildbill", + "wildcard", + "ipswich", + "200000", + "bearcat", + "zigzag", + "yyyyyyyy", + "xander", + "sweetnes", + "369369", + "skyler", + "skywalker", + "pigeon", + "peyton", + "tipper", + "lilly", + "asdf123", + "alphabet", + "asdzxc", + "babybaby", + "banane", + "barnes", + "guyver", + "graphics", + "grand", + "chinook", + "florida1", + "flexible", + "fuckinside", + "otis", + "ursitesux", + "tototo", + "trust", + "tower", + "adam12", + "christma", + "corey", + "chrome", + "buddie", + "bombers", + "bunker", + "hippie", + "keegan", + "misfits", + "vickie", + "292929", + "woofer", + "wwwwwwww", + "stubby", + "sheep", + "secrets", + "sparta", + "stang", + "spud", + "sporty", + "pinball", + "jorge", + "just4fun", + "johanna", + "maxxxx", + "rebecca1", + "gunther", + "fatima", + "fffffff", + "freeway", + "garion", + "score", + "rrrrr", + "sancho", + "outback", + "maggot", + "puddin", + "trial", + "adrienne", + "987456", + "colton", + "clyde", + "brain", + "brains", + "hoops", + "eleanor", + "dwayne", + "kirby", + "mydick", + "villa", + "19691969", + "bigcat", + "becker", + "shiner", + "silverad", + "spanish", + "templar", + "lamer", + "juicy", + "marsha", + "mike1", + "maximum", + "rhiannon", + "real", + "1223", + "10101010", + "arrows", + "andres", + "alucard", + "baldwin", + "baron", + "avenue", + "ashleigh", + "haggis", + "channel", + "cheech", + "safari", + "ross", + "dog123", + "orion1", + "paloma", + "qwerasdf", + "presiden", + "vegitto", + "trees", + "969696", + "adonis", + "colonel", + "cookie1", + "newyork1", + "brigitte", + "buddyboy", + "hellos", + "heineken", + "dwight", + "eraser", + "kerstin", + "motion", + "moritz", + "millwall", + "visual", + "jaybird", + "1983", + "beautifu", + "bitter", + "yvette", + "zodiac", + "steven1", + "sinister", + "slammer", + "smashing", + "slick1", + "sponge", + "teddybea", + "theater", + "this", + "ticklish", + "lipstick", + "jonny", + "massage", + "mann", + "reynolds", + "ring", + "1211", + "amazing", + "aptiva", + "applepie", + "bailey1", + "guitar1", + "chanel", + "canyon", + "gagged", + "fuckme1", + "rough", + "digital1", + "dinosaur", + "punk", + "98765", + "90210", + "clowns", + "cubs", + "daniels", + "deejay", + "nigga", + "naruto", + "boxcar", + "icehouse", + "hotties", + "electra", + "kent", + "widget", + "india", + "insanity", + "1986", + "2004", + "best", + "bluefish", + "bingo1", + "*****", + "stratus", + "strength", + "sultan", + "storm1", + "44444", + "4200", + "sentnece", + "season", + "sexyboy", + "sigma", + "smokie", + "spam", + "point", + "pippo", + "ticket", + "temppass", + "joel", + "manman", + "medicine", + "1022", + "anton", + "almond", + "bacchus", + "aztnm", + "axio", + "awful", + "bamboo", + "hakr", + "gregor", + "hahahaha", + "5678", + "casanova", + "caprice", + "camero1", + "fellow", + "fountain", + "dupont", + "dolphin1", + "dianne", + "paddle", + "magnet", + "qwert1", + "pyon", + "porsche1", + "tripper", + "vampires", + "coming", + "noway", + "burrito", + "bozo", + "highheel", + "hughes", + "hookem", + "eddie1", + "ellie", + "entropy", + "kkkkkkkk", + "kkkkkkk", + "illinois", + "jacobs", + "1945", + "1951", + "24680", + "21212121", + "100000", + "stonecold", + "taco", + "subzero", + "sharp", + "sexxxy", + "skolko", + "shanna", + "skyhawk", + "spurs1", + "sputnik", + "piazza", + "testpass", + "letter", + "lane", + "kurt", + "jiggaman", + "matilda", + "1224", + "harvard", + "hannah1", + "525252", + "4ever", + "carbon", + "chef", + "federico", + "ghosts", + "gina", + "scorpio1", + "rt6ytere", + "madison1", + "loki", + "raquel", + "promise", + "coolness", + "christina", + "coldbeer", + "citadel", + "brittney", + "highway", + "evil", + "monarch", + "morgan1", + "washingt", + "1997", + "bella1", + "berry", + "yaya", + "yolanda", + "superb", + "taxman", + "studman", + "stephanie", + "3636", + "sherri", + "sheriff", + "shepherd", + "poland", + "pizzas", + "tiffany1", + "toilet", + "latina", + "lassie", + "larry1", + "joseph1", + "mephisto", + "meagan", + "marian", + "reptile", + "rico", + "razor", + "1013", + "barron", + "hammer1", + "gypsy", + "grande", + "carroll", + "camper", + "chippy", + "cat123", + "call", + "chimera", + "fiesta", + "glock", + "glenn", + "domain", + "dieter", + "dragonba", + "onetwo", + "nygiants", + "odessa", + "password2", + "louie", + "quartz", + "prowler", + "prophet", + "towers", + "ultra", + "cocker", + "corleone", + "dakota1", + "cumm", + "nnnnnnn", + "natalia", + "boxers", + "hugo", + "heynow", + "hollow", + "iceberg", + "elvira", + "kittykat", + "kate", + "kitchen", + "wasabi", + "vikings1", + "impact", + "beerman", + "string", + "sleep", + "splinter", + "snoopy1", + "pipeline", + "pocket", + "legs", + "maple", + "mickey1", + "manuela", + "mermaid", + "micro", + "meowmeow", + "redbird", + "alisha", + "baura", + "battery", + "grass", + "chevys", + "chestnut", + "caravan", + "carina", + "charmed", + "fraser", + "frogman", + "diving", + "dogger", + "draven", + "drifter", + "oatmeal", + "paris1", + "longdong", + "quant4307s", + "rachel1", + "vegitta", + "cole", + "cobras", + "corsair", + "dadada", + "noelle", + "mylife", + "nine", + "bowwow", + "body", + "hotrats", + "eastwood", + "moonligh", + "modena", + "wave", + "illusion", + "iiiiiii", + "jayhawks", + "birgit", + "zone", + "sutton", + "susana", + "swingers", + "shocker", + "shrimp", + "sexgod", + "squall", + "stefanie", + "squeeze", + "soul", + "patrice", + "poiu", + "players", + "tigers1", + "toejam", + "tickler", + "line", + "julie1", + "jimbo1", + "jefferso", + "juanita", + "michael2", + "rodeo", + "robot", + "1023", + "annie1", + "bball", + "guess", + "happy2", + "charter", + "farm", + "flasher", + "falcon1", + "fiction", + "fastball", + "gadget", + "scrabble", + "diaper", + "dirtbike", + "dinner", + "oliver1", + "partner", + "paco", + "lucille", + "macman", + "poopy", + "popper", + "postman", + "ttttttt", + "ursula", + "acura", + "cowboy1", + "conan", + "daewoo", + "cyrus", + "customer", + "nation", + "nemrac58", + "nnnnn", + "nextel", + "bolton", + "bobdylan", + "hopeless", + "eureka", + "extra", + "kimmie", + "kcj9wx5n", + "killbill", + "musica", + "volkswag", + "wage", + "windmill", + "wert", + "vintage", + "iloveyou1", + "itsme", + "bessie", + "zippo", + "311311", + "starligh", + "smokey1", + "spot", + "snappy", + "soulmate", + "plasma", + "thelma", + "tonight", + "krusty", + "just4me", + "mcdonald", + "marius", + "rochelle", + "rebel1", + "1123", + "alfredo", + "aubrey", + "audi", + "chantal", + "fick", + "goaway", + "roses", + "sales", + "rusty2", + "dirt", + "dogbone", + "doofus", + "ooooooo", + "oblivion", + "mankind", + "luck", + "mahler", + "lllllll", + "pumper", + "puck", + "pulsar", + "valkyrie", + "tupac", + "compass", + "concorde", + "costello", + "cougars", + "delaware", + "niceguy", + "nocturne", + "bob123", + "boating", + "bronze", + "hopkins", + "herewego", + "hewlett", + "houhou", + "hubert", + "earnhard", + "eeeeeeee", + "keller", + "mingus", + "mobydick", + "venture", + "verizon", + "imation", + "1950", + "1948", + "1949", + "223344", + "bigbig", + "blossom", + "zack", + "wowwow", + "sissy", + "skinner", + "spiker", + "square", + "snooker", + "sluggo", + "player1", + "junk", + "jeannie", + "jsbach", + "jumbo", + "jewel", + "medic", + "robins", + "reddevil", + "reckless", + "123456a", + "1125", + "1031", + "beacon", + "astra", + "gumby", + "hammond", + "hassan", + "757575", + "585858", + "chillin", + "fuck1", + "sander", + "lowell", + "radiohea", + "upyours", + "trek", + "courage", + "coolcool", + "classics", + "choochoo", + "darryl", + "nikki1", + "nitro", + "bugs", + "boytoy", + "ellen", + "excite", + "kirsty", + "kane", + "wingnut", + "wireless", + "icu812", + "1master", + "beatle", + "bigblock", + "blanca", + "wolfen", + "summer99", + "sugar1", + "tartar", + "sexysexy", + "senna", + "sexman", + "sick", + "someone", + "soprano", + "pippin", + "platypus", + "pixies", + "telephon", + "land", + "laura1", + "laurent", + "rimmer", + "road", + "report", + "1020", + "12qwaszx", + "arturo", + "around", + "hamish", + "halifax", + "fishhead", + "forum", + "dododo", + "doit", + "outside", + "paramedi", + "lonesome", + "mandy1", + "twist", + "uuuuu", + "uranus", + "ttttt", + "butcher", + "bruce1", + "helper", + "hopeful", + "eduard", + "dusty1", + "kathy1", + "katherin", + "moonbeam", + "muscles", + "monster1", + "monkeybo", + "morton", + "windsurf", + "vvvvvvv", + "vivid", + "install", + "1947", + "187187", + "1941", + "1952", + "tatiana", + "susan1", + "31415926", + "sinned", + "sexxy", + "senator", + "sebastian", + "shadows", + "smoothie", + "snowflak", + "playstat", + "playa", + "playboy1", + "toaster", + "jerry1", + "marie1", + "mason1", + "merlin1", + "roger1", + "roadster", + "112358", + "1121", + "andrea1", + "bacardi", + "auto", + "hardware", + "hardy", + "789789", + "5555555", + "captain1", + "flores", + "fergus", + "sascha", + "rrrrrrr", + "dome", + "onion", + "nutter", + "lololo", + "qqqqqqq", + "quick", + "undertak", + "uuuuuuuu", + "uuuuuuu", + "criminal", + "cobain", + "cindy1", + "coors", + "dani", + "descent", + "nimbus", + "nomad", + "nanook", + "norwich", + "bomb", + "bombay", + "broker", + "hookup", + "kiwi", + "winners", + "jackpot", + "1a2b3c4d", + "1776", + "beardog", + "bighead", + "blast", + "bird33", + "987", + "stress", + "shot", + "spooge", + "pelican", + "peepee", + "perry", + "pointer", + "titan", + "thedoors", + "jeremy1", + "annabell", + "altima", + "baba", + "hallie", + "hate", + "hardone", + "5454", + "candace", + "catwoman", + "flip", + "faithful", + "finance", + "farmboy", + "farscape", + "genesis1", + "salomon", + "destroy", + "papers", + "option", + "page", + "loser1", + "lopez", + "r2d2", + "pumpkins", + "training", + "chriss", + "cumcum", + "ninjas", + "ninja1", + "hung", + "erika", + "eduardo", + "killers", + "miller1", + "islander", + "jamesbond", + "intel", + "jarvis", + "19841984", + "2626", + "bizzare", + "blue12", + "biker", + "yoyoma", + "sushi", + "styles", + "shitface", + "series", + "shanti", + "spanker", + "steffi", + "smart", + "sphinx", + "please1", + "paulie", + "pistons", + "tiburon", + "limited", + "maxwell1", + "mdogg", + "rockies", + "armstron", + "alexia", + "arlene", + "alejandr", + "arctic", + "banger", + "audio", + "asimov", + "augustus", + "grandpa", + "753951", + "4you", + "chilly", + "care1839", + "chapman", + "flyfish", + "fantasia", + "freefall", + "santa", + "sandrine", + "oreo", + "ohshit", + "macbeth", + "madcat", + "loveya", + "mallory", + "rage", + "quentin", + "qwerqwer", + "project", + "ramirez", + "colnago", + "citizen", + "chocha", + "cobalt", + "crystal1", + "dabears", + "nevets", + "nineinch", + "broncos1", + "helene", + "huge", + "edgar", + "epsilon", + "easter", + "kestrel", + "moron", + "virgil", + "winston1", + "warrior1", + "iiiiiiii", + "iloveyou2", + "1616", + "beat", + "bettina", + "woowoo", + "zander", + "straight", + "shower", + "sloppy", + "specialk", + "tinkerbe", + "jellybea", + "reader", + "romero", + "redsox1", + "ride", + "1215", + "1112", + "annika", + "arcadia", + "answer", + "baggio", + "base", + "guido", + "555666", + "carmel", + "cayman", + "cbr900rr", + "chips", + "gabriell", + "gertrude", + "glennwei", + "roxy", + "sausages", + "disco", + "pass1", + "luna", + "lovebug", + "macmac", + "queenie", + "puffin", + "vanguard", + "trip", + "trinitro", + "airwolf", + "abbott", + "aaa111", + "cocaine", + "cisco", + "cottage", + "dayton", + "deadly", + "datsun", + "bricks", + "bumper", + "eldorado", + "kidrock", + "wizard1", + "whiskers", + "wind", + "wildwood", + "istheman", + "interest", + "italy", + "25802580", + "benoit", + "bigones", + "woodland", + "wolfpac", + "strawber", + "suicide", + "3030", + "sheba1", + "sixpack", + "peace1", + "physics", + "pearson", + "tigger2", + "toad", + "megan1", + "meow", + "ringo", + "roll", + "amsterdam", + "717171", + "686868", + "5424", + "catherine", + "canuck", + "football1", + "footjob", + "fulham", + "seagull", + "orgy", + "lobo", + "mancity", + "truth", + "trace", + "vancouve", + "vauxhall", + "acidburn", + "derf", + "myspace1", + "boozer", + "buttercu", + "howell", + "hola", + "easton", + "minemine", + "munch", + "jared", + "1dragon", + "biology", + "bestbuy", + "bigpoppa", + "blackout", + "blowfish", + "bmw325", + "bigbob", + "stream", + "talisman", + "tazz", + "sundevil", + "3333333", + "skate", + "shutup", + "shanghai", + "shop", + "spencer1", + "slowhand", + "polish", + "pinky1", + "tootie", + "thecrow", + "leroy", + "jonathon", + "jubilee", + "jingle", + "martine", + "matrix1", + "manowar", + "michaels", + "messiah", + "mclaren", + "resident", + "reilly", + "redbaron", + "rollins", + "romans", + "return", + "rivera", + "andromed", + "athlon", + "beach1", + "badgers", + "guitars", + "harald", + "harddick", + "gotribe", + "6996", + "7grout", + "5wr2i7h8", + "635241", + "chase1", + "carver", + "charlotte", + "fallout", + "fiddle", + "fredrick", + "fenris", + "francesc", + "fortuna", + "ferguson", + "fairlane", + "felipe", + "felix1", + "forward", + "gasman", + "frost", + "fucks", + "sahara", + "sassy1", + "dogpound", + "dogbert", + "divx1", + "manila", + "loretta", + "priest", + "pornporn", + "quasar", + "venom", + "987987", + "access1", + "clippers", + "daylight", + "decker", + "daman", + "data", + "dentist", + "crusty", + "nathan1", + "nnnnnnnn", + "bruno1", + "bucks", + "brodie", + "budapest", + "kittens", + "kerouac", + "mother1", + "waldo1", + "wedding", + "whistler", + "whatwhat", + "wanderer", + "idontkno", + "1942", + "1946", + "bigdawg", + "bigpimp", + "zaqwsx", + "414141", + "3000gt", + "434343", + "shoes", + "serpent", + "starr", + "smurf", + "pasword", + "tommie", + "thisisit", + "lake", + "john1", + "robotics", + "redeye", + "rebelz", + "1011", + "alatam", + "asses", + "asians", + "bama", + "banzai", + "harvest", + "gonzalez", + "hair", + "hanson", + "575757", + "5329", + "cascade", + "chinese", + "fatty", + "fender1", + "flower2", + "funky", + "sambo", + "drummer1", + "dogcat", + "dottie", + "oedipus", + "osama", + "macleod", + "prozac", + "private1", + "rampage", + "punch", + "presley", + "concord", + "cook", + "cinema", + "cornwall", + "cleaner", + "christopher", + "ciccio", + "corinne", + "clutch", + "corvet07", + "daemon", + "bruiser", + "boiler", + "hjkl", + "eyes", + "egghead", + "expert", + "ethan", + "kasper", + "mordor", + "wasted", + "jamess", + "iverson3", + "bluesman", + "zouzou", + "90909", + "1002", + "switch", + "stone1", + "4040", + "sisters", + "sexo", + "shawna", + "smith1", + "sperma", + "sneaky", + "polska", + "thewho", + "terminat", + "krypton", + "lawson", + "library", + "lekker", + "jules", + "johnson1", + "johann", + "justus", + "rockie", + "romano", + "aspire", + "bastards", + "goodie", + "cheese1", + "fenway", + "fishon", + "fishin", + "fuckoff1", + "girls1", + "sawyer", + "dolores", + "desmond", + "duane", + "doomsday", + "pornking", + "ramones", + "rabbits", + "transit", + "aaaaa1", + "clock", + "delilah", + "noel", + "boyz", + "bookworm", + "bongo", + "bunnies", + "brady", + "buceta", + "highbury", + "henry1", + "heels", + "eastern", + "krissy", + "mischief", + "mopar", + "ministry", + "vienna", + "weston", + "wildone", + "vodka", + "jayson", + "bigbooty", + "beavis1", + "betsy", + "xxxxxx1", + "yogibear", + "1", + "815", + "zulu", + "420000", + "september", + "sigmar", + "sprout", + "stalin", + "peggy", + "patch", + "lkjhgfds", + "lagnaf", + "rolex", + "redfox", + "referee", + "123123123", + "1231", + "angus1", + "ariana", + "ballin", + "attila", + "hall", + "greedy", + "grunt", + "747474", + "carpedie", + "cecile", + "caramel", + "foxylady", + "field", + "gatorade", + "gidget", + "futbol", + "frosch", + "saiyan", + "schmidt", + "drums", + "donner", + "doggy1", + "drum", + "doudou", + "pack", + "pain", + "nutmeg", + "quebec", + "valdepen", + "trash", + "triple", + "tosser", + "tuscl", + "track", + "comfort", + "choke", + "comein", + "cola", + "deputy", + "deadpool", + "bremen", + "borders", + "bronson", + "break", + "hotass", + "hotmail1", + "eskimo", + "eggman", + "koko", + "kieran", + "katrin", + "kordell1", + "komodo", + "mone", + "munich", + "vvvvvvvv", + "winger", + "jaeger", + "ivan", + "jackson5", + "2222222", + "bergkamp", + "bennie", + "bigben", + "zanzibar", + "worm", + "xxx123", + "sunny1", + "373737", + "services", + "sheridan", + "slater", + "slayer1", + "snoop", + "stacie", + "peachy", + "thecure", + "times", + "little1", + "jennaj", + "marquis", + "middle", + "rasta69", + "1114", + "aries", + "havana", + "gratis", + "calgary", + "checkers", + "flanker", + "salope", + "dirty1", + "draco", + "dogface", + "luv2epus", + "rainbow6", + "qwerty123", + "umpire", + "turnip", + "vbnm", + "tucson", + "troll", + "aileen", + "codered", + "commande", + "damon", + "nana", + "neon", + "nico", + "nightwin", + "neil", + "boomer1", + "bushido", + "hotmail0", + "horace", + "enternow", + "kaitlyn", + "keepout", + "karen1", + "mindy", + "mnbv", + "viewsoni", + "volcom", + "wizards", + "wine", + "1995", + "berkeley", + "bite", + "zach", + "woodstoc", + "tarpon", + "shinobi", + "starstar", + "phat", + "patience", + "patrol", + "toolbox", + "julien", + "johnny1", + "joebob", + "marble", + "riders", + "reflex", + "120676", + "1235", + "angelus", + "anthrax", + "atlas", + "hawks", + "grandam", + "harlem", + "hawaii50", + "gorgeous", + "655321", + "cabron", + "challeng", + "callisto", + "firewall", + "firefire", + "fischer", + "flyer", + "flower1", + "factory", + "federal", + "gambler", + "frodo1", + "funk", + "sand", + "sam123", + "scania", + "dingo", + "papito", + "passmast", + "olive", + "palermo", + "ou8123", + "lock", + "ranch", + "pride", + "randy1", + "twiggy", + "travis1", + "transfer", + "treetop", + "addict", + "admin1", + "963852", + "aceace", + "clarissa", + "cliff", + "cirrus", + "clifton", + "colin", + "bobdole", + "bonner", + "bogus", + "bonjovi", + "bootsy", + "boater", + "elway7", + "edison", + "kelvin", + "kenny1", + "moonshin", + "montag", + "moreno", + "wayne1", + "white1", + "jazzy", + "jakejake", + "1994", + "1991", + "2828", + "blunt", + "bluejays", + "beau", + "belmont", + "worthy", + "systems", + "sensei", + "southpark", + "stan", + "peeper", + "pharao", + "pigpen", + "tomahawk", + "teensex", + "leedsutd", + "larkin", + "jermaine", + "jeepster", + "jimjim", + "josephin", + "melons", + "marlon", + "matthias", + "marriage", + "robocop", + "1003", + "1027", + "antelope", + "azsxdc", + "gordo", + "hazard", + "granada", + "8989", + "7894", + "ceasar", + "cabernet", + "cheshire", + "california", + "chelle", + "candy1", + "fergie", + "fanny", + "fidelio", + "giorgio", + "fuckhead", + "ruth", + "sanford", + "diego", + "dominion", + "devon", + "panic", + "longer", + "mackie", + "qawsed", + "trucking", + "twelve", + "chloe1", + "coral", + "daddyo", + "nostromo", + "boyboy", + "booster", + "bucky", + "honolulu", + "esquire", + "dynamite", + "motor", + "mollydog", + "wilder", + "windows1", + "waffle", + "wallet", + "warning", + "virus", + "washburn", + "wealth", + "vincent1", + "jabber", + "jaguars", + "javelin", + "irishman", + "idefix", + "bigdog1", + "blue42", + "blanked", + "blue32", + "biteme1", + "bearcats", + "blaine", + "yessir", + "sylveste", + "team", + "stephan", + "sunfire", + "tbird", + "stryker", + "3ip76k2", + "sevens", + "sheldon", + "pilgrim", + "tenchi", + "titman", + "leeds", + "lithium", + "lander", + "linkin", + "landon", + "marijuan", + "mariner", + "markie", + "midnite", + "reddwarf", + "1129", + "123asd", + "12312312", + "allstar", + "albany", + "asdf12", + "antonia", + "aspen", + "hardball", + "goldfing", + "7734", + "49ers", + "carlo", + "chambers", + "cable", + "carnage", + "callum", + "carlos1", + "fitter", + "fandango", + "festival", + "flame", + "gofast", + "gamma", + "fucmy69", + "scrapper", + "dogwood", + "django", + "magneto", + "loose", + "premium", + "addison", + "9999999", + "abc1234", + "cromwell", + "newyear", + "nichole", + "bookie", + "burns", + "bounty", + "brown1", + "bologna", + "earl", + "entrance", + "elway", + "killjoy", + "kerry", + "keenan", + "kick", + "klondike", + "mini", + "mouser", + "mohammed", + "wayer", + "impreza", + "irene", + "insomnia", + "24682468", + "2580", + "24242424", + "billbill", + "bellaco", + "blessing", + "blues1", + "bedford", + "blanco", + "blunts", + "stinks", + "teaser", + "streets", + "sf49ers", + "shovel", + "solitude", + "spikey", + "sonia", + "pimpdadd", + "timeout", + "toffee", + "lefty", + "johndoe", + "johndeer", + "mega", + "manolo", + "mentor", + "margie", + "ratman", + "ridge", + "record", + "rhodes", + "robin1", + "1124", + "1210", + "1028", + "1226", + "another", + "babylove", + "barbados", + "harbor", + "gramma", + "646464", + "carpente", + "chaos1", + "fishbone", + "fireblad", + "glasgow", + "frogs", + "scissors", + "screamer", + "salem", + "scuba1", + "ducks", + "driven", + "doggies", + "dicky", + "donovan", + "obsidian", + "rams", + "progress", + "tottenham", + "aikman", + "comanche", + "corolla", + "clarke", + "conway", + "cumslut", + "cyborg", + "dancing", + "boston1", + "bong", + "houdini", + "helmut", + "elvisp", + "edge", + "keksa12", + "misha", + "monty1", + "monsters", + "wetter", + "watford", + "wiseguy", + "veronika", + "visitor", + "janelle", + "1989", + "1987", + "20202020", + "biatch", + "beezer", + "bigguns", + "blueball", + "bitchy", + "wyoming", + "yankees2", + "wrestler", + "stupid1", + "sealteam", + "sidekick", + "simple1", + "smackdow", + "sporting", + "spiral", + "smeller", + "sperm", + "plato", + "tophat", + "test2", + "theatre", + "thick", + "toomuch", + "leigh", + "jello", + "jewish", + "junkie", + "maxim", + "maxime", + "meadow", + "remingto", + "roofer", + "124038", + "1018", + "1269", + "1227", + "123457", + "arkansas", + "alberta", + "aramis", + "andersen", + "beaker", + "barcelona", + "baltimor", + "googoo", + "goochi", + "852456", + "4711", + "catcher", + "carman", + "champ1", + "chess", + "fortress", + "fishfish", + "firefigh", + "geezer", + "rsalinas", + "samuel1", + "saigon", + "scooby1", + "doors", + "dick1", + "devin", + "doom", + "dirk", + "doris", + "dontknow", + "load", + "magpies", + "manfred", + "raleigh", + "vader1", + "universa", + "tulips", + "defense", + "mygirl", + "burn", + "bowtie", + "bowman", + "holycow", + "heinrich", + "honeys", + "enforcer", + "katherine", + "minerva", + "wheeler", + "witch", + "waterboy", + "jaime", + "irving", + "1992", + "23skidoo", + "bimbo", + "blue11", + "birddog", + "woodman", + "womble", + "zildjian", + "30303", + "stinker", + "stoppedby", + "sexybabe", + "speakers", + "slugger", + "spotty", + "smoke1", + "polopolo", + "perfect1", + "things", + "torpedo", + "tender", + "thrasher", + "lakeside", + "lilith", + "jimmys", + "jerk", + "junior1", + "marsh", + "masamune", + "rice", + "root", + "1214", + "april1", + "allgood", + "bambi", + "grinch", + "767676", + "5252", + "cherries", + "chipmunk", + "cezer121", + "carnival", + "capecod", + "finder", + "flint", + "fearless", + "goats", + "funstuff", + "gideon", + "savior", + "seabee", + "sandro", + "schalke", + "salasana", + "disney1", + "duckman", + "options", + "pancake", + "pantera1", + "malice", + "lookin", + "love123", + "lloyd", + "qwert123", + "puppet", + "prayers", + "union", + "tracer", + "crap", + "creation", + "cwoui", + "nascar24", + "hookers", + "hollie", + "hewitt", + "estrella", + "erection", + "ernesto", + "ericsson", + "edthom", + "kaylee", + "kokoko", + "kokomo", + "kimball", + "morales", + "mooses", + "monk", + "walton", + "weekend", + "inter", + "internal", + "1michael", + "1993", + "19781978", + "25252525", + "worker", + "summers", + "surgery", + "shibby", + "shamus", + "skibum", + "sheepdog", + "sex69", + "spliff", + "slipper", + "spoons", + "spanner", + "snowbird", + "slow", + "toriamos", + "temp123", + "tennesse", + "lakers1", + "jomama", + "julio", + "mazdarx7", + "rosario", + "recon", + "riddle", + "room", + "revolver", + "1025", + "1101", + "barney1", + "babycake", + "baylor", + "gotham", + "gravity", + "hallowee", + "hancock", + "616161", + "515000", + "caca", + "cannabis", + "castor", + "chilli", + "fdsa", + "getout", + "fuck69", + "gators1", + "sail", + "sable", + "rumble", + "dolemite", + "dork", + "dickens", + "duffer", + "dodgers1", + "painting", + "onions", + "logger", + "lorena", + "lookout", + "magic32", + "port", + "poon", + "prime", + "twat", + "coventry", + "citroen", + "christmas", + "civicsi", + "cocksucker", + "coochie", + "compaq1", + "nancy1", + "buzzer", + "boulder", + "butkus", + "bungle", + "hogtied", + "honor", + "hero", + "hotgirls", + "hilary", + "heidi1", + "eggplant", + "mustang6", + "mortal", + "monkey12", + "wapapapa", + "wendy1", + "volleyba", + "vibrate", + "vicky", + "bledsoe", + "blink", + "birthday4", + "woof", + "xxxxx1", + "talk", + "stephen1", + "suburban", + "stock", + "tabatha", + "sheeba", + "start1", + "soccer10", + "something", + "starcraft", + "soccer12", + "peanut1", + "plastics", + "penthous", + "peterbil", + "tools", + "tetsuo", + "torino", + "tennis1", + "termite", + "ladder", + "last", + "lemmein", + "lakewood", + "jughead", + "melrose", + "megane", + "reginald", + "redone", + "request", + "angela1", + "alive", + "alissa", + "goodgirl", + "gonzo1", + "golden1", + "gotyoass", + "656565", + "626262", + "capricor", + "chains", + "calvin1", + "foolish", + "fallon", + "getmoney", + "godfather", + "gabber", + "gilligan", + "runaway", + "salami", + "dummy", + "dungeon", + "dudedude", + "dumb", + "dope", + "opus", + "paragon", + "oxygen", + "panhead", + "pasadena", + "opendoor", + "odyssey", + "magellan", + "lottie", + "printing", + "pressure", + "prince1", + "trustme", + "christa", + "court", + "davies", + "neville", + "nono", + "bread", + "buffet", + "hound", + "kajak", + "killkill", + "mona", + "moto", + "mildred", + "winner1", + "vixen", + "whiteboy", + "versace", + "winona", + "voyager1", + "instant", + "indy", + "jackjack", + "bigal", + "beech", + "biggun", + "blake1", + "blue99", + "big1", + "woods", + "synergy", + "success1", + "336699", + "sixty9", + "shark1", + "skin", + "simba1", + "sharpe", + "sebring", + "spongebo", + "spunk", + "springs", + "sliver", + "phialpha", + "password9", + "pizza1", + "plane", + "perkins", + "pookey", + "tickling", + "lexingky", + "lawman", + "joe123", + "jolly", + "mike123", + "romeo1", + "redheads", + "reserve", + "apple123", + "alanis", + "ariane", + "antony", + "backbone", + "aviation", + "band", + "hand", + "green123", + "haley", + "carlitos", + "byebye", + "cartman1", + "camden", + "chewy", + "camaross", + "favorite6", + "forumwp", + "franks", + "ginscoot", + "fruity", + "sabrina1", + "devil666", + "doughnut", + "pantie", + "oldone", + "paintball", + "lumina", + "rainbow1", + "prosper", + "total", + "true", + "umbrella", + "ajax", + "951753", + "achtung", + "abc12345", + "compact", + "color", + "corn", + "complete", + "christi", + "closer", + "corndog", + "deerhunt", + "darklord", + "dank", + "nimitz", + "brandy1", + "bowl", + "breanna", + "holidays", + "hetfield", + "holein1", + "hillbill", + "hugetits", + "east", + "evolutio", + "kenobi", + "whiplash", + "waldo", + "wg8e3wjf", + "wing", + "istanbul", + "invis", + "1996", + "benton", + "bigjohn", + "bluebell", + "beef", + "beater", + "benji", + "bluejay", + "xyzzy", + "wrestling", + "storage", + "superior", + "suckdick", + "taichi", + "stellar", + "stephane", + "shaker", + "skirt", + "seymour", + "semper", + "splurge", + "squeak", + "pearls", + "playball", + "pitch", + "phyllis", + "pooky", + "piss", + "tomas", + "titfuck", + "joemama", + "johnny5", + "marcello", + "marjorie", + "married", + "maxi", + "rhubarb", + "rockwell", + "ratboy", + "reload", + "rooney", + "redd", + "1029", + "1030", + "1220", + "anchor", + "bbking", + "baritone", + "gryphon", + "gone", + "57chevy", + "494949", + "celeron", + "fishy", + "gladiator", + "fucker1", + "roswell", + "dougie", + "downer", + "dicker", + "diva", + "domingo", + "donjuan", + "nympho", + "omar", + "praise", + "racers", + "trick", + "trauma", + "truck1", + "trample", + "acer", + "corwin", + "cricket1", + "clemente", + "climax", + "denmark", + "cuervo", + "notnow", + "nittany", + "neutron", + "native", + "bosco1", + "buffa", + "breaker", + "hello2", + "hydro", + "estelle", + "exchange", + "explore", + "kisskiss", + "kittys", + "kristian", + "montecar", + "modem", + "mississi", + "mooney", + "weiner", + "washington", + "20012001", + "bigdick1", + "bibi", + "benfica", + "yahoo1", + "striper", + "tabasco", + "supra", + "383838", + "456654", + "seneca", + "serious", + "shuttle", + "socks", + "stanton", + "penguin1", + "pathfind", + "testibil", + "thethe", + "listen", + "lightning", + "lighting", + "jeter2", + "marma", + "mark1", + "metoo", + "republic", + "rollin", + "redleg", + "redbone", + "redskin", + "rocco", + "1245", + "armand", + "anthony7", + "altoids", + "andrews", + "barley", + "away", + "asswipe", + "bauhaus", + "bbbbbb1", + "gohome", + "harrier", + "golfpro", + "goldeney", + "818181", + "6666666", + "5000", + "5rxypn", + "cameron1", + "calling", + "checker", + "calibra", + "fields", + "freefree", + "faith1", + "fist", + "fdm7ed", + "finally", + "giraffe", + "glasses", + "giggles", + "fringe", + "gate", + "georgie", + "scamper", + "rrpass1", + "screwyou", + "duffy", + "deville", + "dimples", + "pacino", + "ontario", + "passthie", + "oberon", + "quest1", + "postov1000", + "puppydog", + "puffer", + "raining", + "protect", + "qwerty7", + "trey", + "tribe", + "ulysses", + "tribal", + "adam25", + "a1234567", + "compton", + "collie", + "cleopatr", + "contract", + "davide", + "norris", + "namaste", + "myrtle", + "buffalo1", + "bonovox", + "buckley", + "bukkake", + "burning", + "burner", + "bordeaux", + "burly", + "hun999", + "emilie", + "elmo", + "enters", + "enrique", + "keisha", + "mohawk", + "willard", + "vgirl", + "whale", + "vince", + "jayden", + "jarrett", + "1812", + "1943", + "222333", + "bigjim", + "bigd", + "zoom", + "wordup", + "ziggy1", + "yahooo", + "workout", + "young1", + "written", + "xmas", + "zzzzzz1", + "surfer1", + "strife", + "sunlight", + "tasha1", + "skunk", + "shauna", + "seth", + "soft", + "sprinter", + "peaches1", + "planes", + "pinetree", + "plum", + "pimping", + "theforce", + "thedon", + "toocool", + "leeann", + "laddie", + "list", + "lkjh", + "lara", + "joke", + "jupiter1", + "mckenzie", + "matty", + "rene", + "redrose", + "1200", + "102938", + "annmarie", + "alexa", + "antares", + "austin31", + "ground", + "goose1", + "737373", + "78945612", + "789987", + "6464", + "calimero", + "caster", + "casper1", + "cement", + "chevrolet", + "chessie", + "caddy", + "chill", + "child", + "canucks", + "feeling", + "favorite", + "fellatio", + "f00tball", + "francine", + "gateway2", + "gigi", + "gamecube", + "giovanna", + "rugby1", + "scheisse", + "dshade", + "dudes", + "dixie1", + "owen", + "offshore", + "olympia", + "lucas1", + "macaroni", + "manga", + "pringles", + "puff", + "tribble", + "trouble1", + "ussy", + "core", + "clint", + "coolhand", + "colonial", + "colt", + "debra", + "darthvad", + "dealer", + "cygnusx1", + "natalie1", + "newark", + "husband", + "hiking", + "errors", + "eighteen", + "elcamino", + "emmett", + "emilia", + "koolaid", + "knight1", + "murphy1", + "volcano", + "idunno", + "2005", + "2233", + "block", + "benito", + "blueberr", + "biguns", + "yamahar1", + "zapper", + "zorro1", + "911", + "3006", + "sixsix", + "shopper", + "siobhan", + "sextoy", + "stafford", + "snowboard", + "speedway", + "sounds", + "pokey", + "peabody", + "playboy2", + "titi", + "think", + "toast", + "toonarmy", + "lister", + "lambda", + "joecool", + "jonas", + "joyce", + "juniper", + "mercer", + "max123", + "manny", + "massimo", + "mariposa", + "met2002", + "reggae", + "ricky1", + "1236", + "1228", + "1016", + "all4one", + "arianna", + "baberuth", + "asgard", + "gonzales", + "484848", + "5683", + "6669", + "catnip", + "chiquita", + "charisma", + "capslock", + "cashmone", + "chat", + "figure", + "galant", + "frenchy", + "gizmodo1", + "girlies", + "gabby", + "garner", + "screwy", + "doubled", + "divers", + "dte4uw", + "done", + "dragonfl", + "maker", + "locks", + "rachelle", + "treble", + "twinkie", + "trailer", + "tropical", + "acid", + "crescent", + "cooking", + "cococo", + "cory", + "dabomb", + "daffy", + "dandfa", + "cyrano", + "nathanie", + "briggs", + "boners", + "helium", + "horton", + "hoffman", + "hellas", + "espresso", + "emperor", + "killa", + "kikimora", + "wanda", + "w4g8at", + "verona", + "ilikeit", + "iforget", + "1944", + "20002000", + "birthday1", + "beatles1", + "blue1", + "bigdicks", + "beethove", + "blacklab", + "blazers", + "benny1", + "woodwork", + "69", + "101", + "taffy", + "susie", + "survivor", + "swim", + "stokes", + "4567", + "shodan", + "spoiled", + "steffen", + "pissed", + "pavlov", + "pinnacle", + "place", + "petunia", + "terrell", + "thirty", + "toni", + "tito", + "teenie", + "lemonade", + "lily", + "lillie", + "lalakers", + "lebowski", + "lalalala", + "ladyboy", + "jeeper", + "joyjoy", + "mercury1", + "mantle", + "mannn", + "rocknrol", + "riversid", + "reeves", + "123aaa", + "11112222", + "121314", + "1021", + "1004", + "1120", + "allen1", + "ambers", + "amstel", + "ambrose", + "alice1", + "alleycat", + "allegro", + "ambrosia", + "alley", + "australia", + "hatred", + "gspot", + "graves", + "goodsex", + "hattrick", + "harpoon", + "878787", + "8inches", + "4wwvte", + "cassandr", + "charlie123", + "case", + "chavez", + "fighting", + "gabriela", + "gatsby", + "fudge", + "gerry", + "generic", + "gareth", + "fuckme2", + "samm", + "sage", + "seadog", + "satchmo", + "scxakv", + "santafe", + "dipper", + "dingle", + "dizzy", + "outoutout", + "madmad", + "london1", + "qbg26i", + "pussy123", + "randolph", + "vaughn", + "tzpvaw", + "vamp", + "comedy", + "comp", + "cowgirl", + "coldplay", + "dawgs", + "delaney", + "nt5d27", + "novifarm", + "needles", + "notredam", + "newness", + "mykids", + "bryan1", + "bouncer", + "hihihi", + "honeybee", + "iceman1", + "herring", + "horn", + "hook", + "hotlips", + "dynamo", + "klaus", + "kittie", + "kappa", + "kahlua", + "muffy", + "mizzou", + "mohamed", + "musical", + "wannabe", + "wednesda", + "whatup", + "weller", + "waterfal", + "willy1", + "invest", + "blanche", + "bear1", + "billabon", + "youknow", + "zelda", + "yyyyyy1", + "zachary1", + "1234567", + "70462", + "zurich", + "superstar", + "storms", + "tail", + "stiletto", + "strat", + "427900", + "sigmachi", + "shelter", + "shells", + "sexy123", + "smile1", + "sophie1", + "stefano", + "stayout", + "somerset", + "smithers", + "playmate", + "pinkfloyd", + "phish1", + "payday", + "thebear", + "telefon", + "laetitia", + "kswbdu", + "larson", + "jetta", + "jerky", + "melina", + "metro", + "revoluti", + "retire", + "respect", + "1216", + "1201", + "1204", + "1222", + "1115", + "archange", + "barry1", + "handball", + "676767", + "chandra", + "chewbacc", + "flesh", + "furball", + "gocubs", + "fruit", + "fullback", + "gman", + "gentle", + "dunbar", + "dewalt", + "dominiqu", + "diver1", + "dhip6a", + "olemiss", + "ollie", + "mandrake", + "mangos", + "pretzel", + "pusssy", + "tripleh", + "valdez", + "vagabond", + "clean", + "comment", + "crew", + "clovis", + "deaths", + "dandan", + "csfbr5yy", + "deadspin", + "darrel", + "ninguna", + "noah", + "ncc74656", + "bootsie", + "bp2002", + "bourbon", + "brennan", + "bumble", + "books", + "hose", + "heyyou", + "houston1", + "hemlock", + "hippo", + "hornets", + "hurricane", + "horseman", + "hogan", + "excess", + "extensa", + "muffin1", + "virginie", + "werdna", + "idontknow", + "info", + "iron", + "jack1", + "1bitch", + "151nxjmt", + "bendover", + "bmwbmw", + "bills", + "zaq123", + "wxcvbn", + "surprise", + "supernov", + "tahoe", + "talbot", + "simona", + "shakur", + "sexyone", + "seviyi", + "sonja", + "smart1", + "speed1", + "pepito", + "phantom1", + "playoffs", + "terry1", + "terrier", + "laser1", + "lite", + "lancia", + "johngalt", + "jenjen", + "jolene", + "midori", + "message", + "maserati", + "matteo", + "mental", + "miami1", + "riffraff", + "ronald1", + "reason", + "rhythm", + "1218", + "1026", + "123987", + "1015", + "1103", + "armada", + "architec", + "austria", + "gotmilk", + "hawkins", + "gray", + "camila", + "camp", + "cambridg", + "charge", + "camero", + "flex", + "foreplay", + "getoff", + "glacier", + "glotest", + "froggie", + "gerbil", + "rugger", + "sanity72", + "salesman", + "donna1", + "dreaming", + "deutsch", + "orchard", + "oyster", + "palmtree", + "ophelia", + "pajero", + "m5wkqf", + "magenta", + "luckyone", + "treefrog", + "vantage", + "usmarine", + "tyvugq", + "uptown", + "abacab", + "aaaaaa1", + "advance", + "chuck1", + "delmar", + "darkange", + "cyclones", + "nate", + "navajo", + "nope", + "border", + "bubba123", + "building", + "iawgk2", + "hrfzlz", + "dylan1", + "enrico", + "encore", + "emilio", + "eclipse1", + "killian", + "kayleigh", + "mutant", + "mizuno", + "mustang2", + "video1", + "viewer", + "weed420", + "whales", + "jaguar1", + "insight", + "1990", + "159159", + "1love", + "bliss", + "bears1", + "bigtruck", + "binder", + "bigboss", + "blitz", + "xqgann", + "yeahyeah", + "zeke", + "zardoz", + "stickman", + "table", + "3825", + "signal", + "sentra", + "side", + "shiva", + "skipper1", + "singapor", + "southpaw", + "sonora", + "squid", + "slamdunk", + "slimjim", + "placid", + "photon", + "placebo", + "pearl1", + "test12", + "therock1", + "tiger123", + "leinad", + "legman", + "jeepers", + "joeblow", + "mccarthy", + "mike23", + "redcar", + "rhinos", + "rjw7x4", + "1102", + "13576479", + "112211", + "alcohol", + "gwju3g", + "greywolf", + "7bgiqk", + "7878", + "535353", + "4snz9g", + "candyass", + "cccccc1", + "carola", + "catfight", + "cali", + "fister", + "fosters", + "finland", + "frankie1", + "gizzmo", + "fuller", + "royalty", + "rugrat", + "sandie", + "rudolf", + "dooley", + "dive", + "doreen", + "dodo", + "drop", + "oemdlg", + "out3xf", + "paddy", + "opennow", + "puppy1", + "qazwsxedc", + "pregnant", + "quinn", + "ramjet", + "under", + "uncle", + "abraxas", + "corner", + "creed", + "cocoa", + "crown", + "cows", + "cn42qj", + "dancer1", + "death666", + "damned", + "nudity", + "negative", + "nimda2k", + "buick", + "bobb", + "braves1", + "brook", + "henrik", + "higher", + "hooligan", + "dust", + "everlast", + "karachi", + "mortis", + "mulligan", + "monies", + "motocros", + "wally1", + "weapon", + "waterman", + "view", + "willie1", + "vicki", + "inspiron", + "1test", + "2929", + "bigblack", + "xytfu7", + "yackwin", + "zaq1xsw2", + "yy5rbfsc", + "100100", + "660", + "tahiti", + "takehana", + "talks", + "332211", + "3535", + "sedona", + "seawolf", + "skydiver", + "shine", + "spleen", + "slash", + "spjfet", + "special1", + "spooner", + "slimshad", + "sopranos", + "spock1", + "penis1", + "patches1", + "terri", + "thierry", + "thething", + "toohot", + "large", + "limpone", + "johnnie", + "mash4077", + "matchbox", + "masterp", + "maxdog", + "ribbit", + "reed", + "rita", + "rockin", + "redhat", + "rising", + "1113", + "14789632", + "1331", + "allday", + "aladin", + "andrey", + "amethyst", + "ariel", + "anytime", + "baseball1", + "athome", + "basil", + "goofy1", + "greenman", + "gustavo", + "goofball", + "ha8fyp", + "goodday", + "778899", + "charon", + "chappy", + "castillo", + "caracas", + "cardiff", + "capitals", + "canada1", + "cajun", + "catter", + "freddy1", + "favorite2", + "frazier", + "forme", + "follow", + "forsaken", + "feelgood", + "gavin", + "gfxqx686", + "garlic", + "sarge", + "saskia", + "sanjose", + "russ", + "salsa", + "dilbert1", + "dukeduke", + "downhill", + "longhair", + "loop", + "locutus", + "lockdown", + "malachi", + "mamacita", + "lolipop", + "rainyday", + "pumpkin1", + "punker", + "prospect", + "rambo1", + "rainbows", + "quake", + "twin", + "trinity1", + "trooper1", + "aimee", + "citation", + "coolcat", + "crappy", + "default", + "dental", + "deniro", + "d9ungl", + "daddys", + "napoli", + "nautica", + "nermal", + "bukowski", + "brick", + "bubbles1", + "bogota", + "board", + "branch", + "breath", + "buds", + "hulk", + "humphrey", + "hitachi", + "evans", + "ender", + "export", + "kikiki", + "kcchiefs", + "kram", + "morticia", + "montrose", + "mongo", + "waqw3p", + "wizzard", + "visited", + "whdbtp", + "whkzyc", + "image", + "154ugeiu", + "1fuck", + "binky", + "blind", + "bigred1", + "blubber", + "benz", + "becky1", + "year2005", + "wonderfu", + "wooden", + "xrated", + "1", + "tampabay", + "survey", + "tammy1", + "stuffer", + "3mpz4r", + "3000", + "3some", + "selina", + "sierra1", + "shampoo", + "silk", + "shyshy", + "slapnuts", + "standby", + "spartan1", + "sprocket", + "sometime", + "stanley1", + "poker1", + "plus", + "thought", + "theshit", + "torture", + "thinking", + "lavalamp", + "light1", + "laserjet", + "jediknig", + "jjjjj1", + "jocelyn", + "mazda626", + "menthol", + "maximo", + "margaux", + "medic1", + "release", + "richter", + "rhino1", + "roach", + "renate", + "repair", + "reveal", + "1209", + "1234321", + "amigos", + "apricot", + "alexandra", + "asdfgh1", + "hairball", + "hatter", + "graduate", + "grimace", + "7xm5rq", + "6789", + "cartoons", + "capcom", + "cheesy", + "cashflow", + "carrots", + "camping", + "fanatic", + "fool", + "format", + "fleming", + "girlie", + "glover", + "gilmore", + "gardner", + "safeway", + "ruthie", + "dogfart", + "dondon", + "diapers", + "outsider", + "odin", + "opiate", + "lollol", + "love12", + "loomis", + "mallrats", + "prague", + "primetime21", + "pugsley", + "program", + "r29hqq", + "touch", + "valleywa", + "airman", + "abcdefg1", + "darkone", + "cummer", + "dempsey", + "damn", + "nadia", + "natedogg", + "nineball", + "ndeyl5", + "natchez", + "newone", + "normandy", + "nicetits", + "buddy123", + "buddys", + "homely", + "husky", + "iceland", + "hr3ytm", + "highlife", + "holla", + "earthlin", + "exeter", + "eatmenow", + "kimkim", + "karine", + "k2trix", + "kernel", + "kirkland", + "money123", + "moonman", + "miles1", + "mufasa", + "mousey", + "wilma", + "wilhelm", + "whites", + "warhamme", + "instinct", + "jackass1", + "2277", + "20spanks", + "blobby", + "blair", + "blinky", + "bikers", + "blackjack", + "becca", + "blue23", + "xman", + "wyvern", + "085tzzqi", + "zxzxzx", + "zsmj2v", + "suede", + "t26gn4", + "sugars", + "sylvie", + "tantra", + "swoosh", + "swiss", + "4226", + "4271", + "321123", + "383pdjvl", + "shoe", + "shane1", + "shelby1", + "spades", + "spain", + "smother", + "soup", + "sparhawk", + "pisser", + "photo1", + "pebble", + "phones", + "peavey", + "picnic", + "pavement", + "terra", + "thistle", + "tokyo", + "therapy", + "lives", + "linden", + "kronos", + "lilbit", + "linux", + "johnston", + "material", + "melanie1", + "marbles", + "redlight", + "reno", + "recall", + "1208", + "1138", + "1008", + "alchemy", + "aolsucks", + "alexalex", + "atticus", + "auditt", + "ballet", + "b929ezzh", + "goodyear", + "hanna", + "griffith", + "gubber", + "863abgsg", + "7474", + "797979", + "464646", + "543210", + "4zqauf", + "4949", + "ch5nmk", + "carlito", + "chewey", + "carebear", + "caleb", + "checkmat", + "cheddar", + "chachi", + "fever", + "forgetit", + "fine", + "forlife", + "giants1", + "gates", + "getit", + "gamble", + "gerhard", + "galileo", + "g3ujwg", + "ganja", + "rufus1", + "rushmore", + "scouts", + "discus", + "dudeman", + "olympus", + "oscars", + "osprey", + "madcow", + "locust", + "loyola", + "mammoth", + "proton", + "rabbit1", + "question", + "ptfe3xxp", + "pwxd5x", + "purple1", + "punkass", + "prophecy", + "uyxnyd", + "tyson1", + "aircraft", + "access99", + "abcabc", + "cocktail", + "colts", + "civilwar", + "cleveland", + "claudia1", + "contour", + "clement", + "dddddd1", + "cypher", + "denied", + "dapzu455", + "dagmar", + "daisydog", + "name", + "noles", + "butters", + "buford", + "hoochie", + "hotel", + "hoser", + "eddy", + "ellis", + "eldiablo", + "kingrich", + "mudvayne", + "motown", + "mp8o6d", + "wife", + "vipergts", + "italiano", + "innocent", + "2055", + "2211", + "beavers", + "bloke", + "blade1", + "yamato", + "zooropa", + "yqlgr667", + "50505", + "zxcvbnm1", + "zw6syj", + "suckcock", + "tango1", + "swing", + "stern", + "stephens", + "swampy", + "susanna", + "tammie", + "445566", + "333666", + "380zliki", + "sexpot", + "sexylady", + "sixtynin", + "sickboy", + "spiffy", + "sleeping", + "skylark", + "sparkles", + "slam", + "pintail", + "phreak", + "places", + "teller", + "timtim", + "tires", + "thighs", + "left", + "latex", + "llamas", + "letsdoit", + "lkjhg", + "landmark", + "letters", + "lizzard", + "marlins", + "marauder", + "metal1", + "manu", + "register", + "righton", + "1127", + "alain", + "alcat", + "amigo", + "basebal1", + "azertyui", + "attract", + "azrael", + "hamper", + "gotenks", + "golfgti", + "gutter", + "hawkwind", + "h2slca", + "harman", + "grace1", + "6chid8", + "789654", + "canine", + "casio", + "cazzo", + "chamber", + "cbr900", + "cabrio", + "calypso", + "capetown", + "feline", + "flathead", + "fisherma", + "flipmode", + "fungus", + "goal", + "g9zns4", + "full", + "giggle", + "gabriel1", + "fuck123", + "saffron", + "dogmeat", + "dreamcas", + "dirtydog", + "dunlop", + "douche", + "dresden", + "dickdick", + "destiny1", + "pappy", + "oaktree", + "lydia", + "luft4", + "puta", + "prayer", + "ramada", + "trumpet1", + "vcradq", + "tulip", + "tracy71", + "tycoon", + "aaaaaaa1", + "conquest", + "click", + "chitown", + "corps", + "creepers", + "constant", + "couples", + "code", + "cornhole", + "danman", + "dada", + "density", + "d9ebk7", + "cummins", + "darth", + "cute", + "nash", + "nirvana1", + "nixon", + "norbert", + "nestle", + "brenda1", + "bonanza", + "bundy", + "buddies", + "hotspur", + "heavy", + "horror", + "hufmqw", + "electro", + "erasure", + "enough", + "elisabet", + "etvww4", + "ewyuza", + "eric1", + "kinder", + "kenken", + "kismet", + "klaatu", + "musician", + "milamber", + "willi", + "waiting", + "isacs155", + "igor", + "1million", + "1letmein", + "x35v8l", + "yogi", + "ywvxpz", + "xngwoj", + "zippy1", + "20202", + "****", + "stonewal", + "sweeney", + "story", + "sentry", + "sexsexsex", + "spence", + "sonysony", + "smirnoff", + "star12", + "solace", + "sledge", + "states", + "snyder", + "star1", + "paxton", + "pentagon", + "pkxe62", + "pilot1", + "pommes", + "paulpaul", + "plants", + "tical", + "tictac", + "toes", + "lighthou", + "lemans", + "kubrick", + "letmein22", + "letmesee", + "jys6wz", + "jonesy", + "jjjjjj1", + "jigga", + "joelle", + "mate", + "merchant", + "redstorm", + "riley1", + "rosa", + "relief", + "14141414", + "1126", + "allison1", + "badboy1", + "asthma", + "auggie", + "basement", + "hartley", + "hartford", + "hardwood", + "gumbo", + "616913", + "57np39", + "56qhxs", + "4mnveh", + "cake", + "forbes", + "fatluvr69", + "fqkw5m", + "fidelity", + "feathers", + "fresno", + "godiva", + "gecko", + "gladys", + "gibson1", + "gogators", + "fridge", + "general1", + "saxman", + "rowing", + "sammys", + "scotts", + "scout1", + "sasasa", + "samoht", + "dragon69", + "ducky", + "dragonball", + "driller", + "p3wqaw", + "nurse", + "papillon", + "oneone", + "openit", + "optimist", + "longshot", + "portia", + "rapier", + "pussy2", + "ralphie", + "tuxedo", + "ulrike", + "undertow", + "trenton", + "copenhag", + "come", + "delldell", + "culinary", + "deltas", + "mytime", + "nicky", + "nickie", + "noname", + "noles1", + "bucker", + "bopper", + "bullock", + "burnout", + "bryce", + "hedges", + "ibilltes", + "hihje863", + "hitter", + "ekim", + "espana", + "eatme69", + "elpaso", + "envelope", + "express1", + "eeeeee1", + "eatme1", + "karaoke", + "kara", + "mustang5", + "misses", + "wellingt", + "willem", + "waterski", + "webcam", + "jasons", + "infinite", + "iloveyou!", + "jakarta", + "belair", + "bigdad", + "beerme", + "yoshi", + "yinyang", + "zimmer", + "x24ik3", + "063dyjuy", + "7", + "ztmfcq", + "stopit", + "stooges", + "survival", + "stockton", + "symow8", + "strato", + "2hot4u", + "ship", + "simons", + "skins", + "shakes", + "sex1", + "shield", + "snacks", + "softtail", + "slimed123", + "pizzaman", + "pipe", + "pitt", + "pathetic", + "pinto", + "tigercat", + "tonton", + "lager", + "lizzy", + "juju", + "john123", + "jennings", + "josiah", + "jesse1", + "jordon", + "jingles", + "martian", + "mario1", + "rootedit", + "rochard", + "redwine", + "requiem", + "riverrat", + "rats", + "1117", + "1014", + "1205", + "althea", + "allie", + "amor", + "amiga", + "alpina", + "alert", + "atreides", + "banana1", + "bahamut", + "hart", + "golfman", + "happines", + "7uftyx", + "5432", + "5353", + "5151", + "4747", + "byron", + "chatham", + "chadwick", + "cherie", + "foxfire", + "ffvdj474", + "freaked", + "foreskin", + "gayboy", + "gggggg1", + "glenda", + "gameover", + "glitter", + "funny1", + "scoobydoo", + "scroll", + "rudolph", + "saddle", + "saxophon", + "dingbat", + "digimon", + "omicron", + "parsons", + "ohio", + "panda1", + "loloxx", + "macintos", + "lululu", + "lollypop", + "racer1", + "queen1", + "qwertzui", + "prick", + "upnfmc", + "tyrant", + "trout1", + "9skw5g", + "aceman", + "adelaide", + "acls2h", + "aaabbb", + "acapulco", + "aggie", + "comcast", + "craft", + "crissy", + "cloudy", + "cq2kph", + "custer", + "d6o8pm", + "cybersex", + "davecole", + "darian", + "crumbs", + "daisey", + "davedave", + "dasani", + "needle", + "mzepab", + "myporn", + "narnia", + "nineteen", + "booger1", + "bravo1", + "budgie", + "btnjey", + "highlander", + "hotel6", + "humbug", + "edwin", + "ewtosi", + "kristin1", + "kobe", + "knuckles", + "keith1", + "katarina", + "muff", + "muschi", + "montana1", + "wingchun", + "wiggle", + "whatthe", + "walking", + "watching", + "vette1", + "vols", + "virago", + "intj3a", + "ishmael", + "intern", + "jachin", + "illmatic", + "199999", + "2010", + "beck", + "blender", + "bigpenis", + "bengal", + "blue1234", + "your", + "zaqxsw", + "xray", + "xxxxxxx1", + "zebras", + "yanks", + "worlds", + "tadpole", + "stripes", + "svetlana", + "3737", + "4343", + "3728", + "4444444", + "368ejhih", + "solar", + "sonne", + "smalls", + "sniffer", + "sonata", + "squirts", + "pitcher", + "playstation", + "pktmxr", + "pescator", + "points", + "texaco", + "lesbos", + "lilian", + "l8v53x", + "jo9k2jw2", + "jimbeam", + "josie", + "jimi", + "jupiter2", + "jurassic", + "marines1", + "maya", + "rocket1", + "ringer", + "14725836", + "12345679", + "1219", + "123098", + "1233", + "alessand", + "althor", + "angelika", + "arch", + "armando", + "alpha123", + "basher", + "barefeet", + "balboa", + "bbbbb1", + "banks", + "badabing", + "harriet", + "gopack", + "golfnut", + "gsxr1000", + "gregory1", + "766rglqy", + "8520", + "753159", + "8dihc6", + "69camaro", + "666777", + "cheeba", + "chino", + "calendar", + "cheeky", + "camel1", + "fishcake", + "falling", + "flubber", + "giuseppe", + "gianni", + "gloves", + "gnasher23", + "frisbee", + "fuzzy1", + "fuzzball", + "sauce", + "save13tx", + "schatz", + "russell1", + "sandra1", + "scrotum", + "scumbag", + "sabre", + "samdog", + "dripping", + "dragon12", + "dragster", + "paige", + "orwell", + "mainland", + "lunatic", + "lonnie", + "lotion", + "maine", + "maddux", + "qn632o", + "poophead", + "rapper", + "porn4life", + "producer", + "rapunzel", + "tracks", + "velocity", + "vanessa1", + "ulrich", + "trueblue", + "vampire1", + "abacus", + "902100", + "crispy", + "corky", + "crane", + "chooch", + "d6wnro", + "cutie", + "deal", + "dabulls", + "dehpye", + "navyseal", + "njqcw4", + "nownow", + "nigger1", + "nightowl", + "nonenone", + "nightmar", + "bustle", + "buddy2", + "boingo", + "bugman", + "bulletin", + "bosshog", + "bowie", + "hybrid", + "hillside", + "hilltop", + "hotlegs", + "honesty", + "hzze929b", + "hhhhh1", + "hellohel", + "eloise", + "evilone", + "edgewise", + "e5pftu", + "eded", + "embalmer", + "excalibur", + "elefant", + "kenzie", + "karl", + "karin", + "killah", + "kleenex", + "mouses", + "mounta1n", + "motors", + "mutley", + "muffdive", + "vivitron", + "winfield", + "wednesday", + "w00t88", + "iloveit", + "jarjar", + "incest", + "indycar", + "17171717", + "1664", + "17011701", + "222777", + "2663", + "beelch", + "benben", + "yitbos", + "yyyyy1", + "yasmin", + "zapata", + "zzzzz1", + "stooge", + "tangerin", + "taztaz", + "stewart1", + "summer69", + "sweetness", + "system1", + "surveyor", + "stirling", + "3qvqod", + "3way", + "456321", + "sizzle", + "simhrq", + "shrink", + "shawnee", + "someday", + "sparty", + "ssptx452", + "sphere", + "spark", + "slammed", + "sober", + "persian", + "peppers", + "ploppy", + "pn5jvw", + "poobear", + "pianos", + "plaster", + "testme", + "tiff", + "thriller", + "larissa", + "lennox", + "jewell", + "master12", + "messier", + "rockey", + "1229", + "1217", + "1478", + "1009", + "anastasi", + "almighty", + "amonra", + "aragon", + "argentin", + "albino", + "azazel", + "grinder", + "6uldv8", + "83y6pv", + "8888888", + "4tlved", + "515051", + "carsten", + "changes", + "flanders", + "flyers88", + "ffffff1", + "firehawk", + "foreman", + "firedog", + "flashman", + "ggggg1", + "gerber", + "godspeed", + "galway", + "giveitup", + "funtimes", + "gohan", + "giveme", + "geryfe", + "frenchie", + "sayang", + "rudeboy", + "savanna", + "sandals", + "devine", + "dougal", + "drag0n", + "dga9la", + "disaster", + "desktop", + "only", + "onlyone", + "otter", + "pandas", + "mafia", + "lombard", + "luckys", + "lovejoy", + "lovelife", + "manders", + "product", + "qqh92r", + "qcmfd454", + "pork", + "radar1", + "punani", + "ptbdhw", + "turtles", + "undertaker", + "trs8f7", + "tramp", + "ugejvp", + "abba", + "911turbo", + "acdc", + "abcd123", + "clever", + "corina", + "cristian", + "create", + "crash1", + "colony", + "crosby", + "delboy", + "daniele", + "davinci", + "daughter", + "notebook", + "niki", + "nitrox", + "borabora", + "bonzai", + "budd", + "brisbane", + "hotter", + "heeled", + "heroes", + "hooyah", + "hotgirl", + "i62gbq", + "horse1", + "hills", + "hpk2qc", + "epvjb6", + "echo", + "korean", + "kristie", + "mnbvc", + "mohammad", + "mind", + "mommy1", + "munster", + "wade", + "wiccan", + "wanted", + "jacket", + "2369", + "bettyboo", + "blondy", + "bismark", + "beanbag", + "bjhgfi", + "blackice", + "yvtte545", + "ynot", + "yess", + "zlzfrh", + "wolvie", + "007bond", + "******", + "tailgate", + "tanya1", + "sxhq65", + "stinky1", + "3234412", + "3ki42x", + "seville", + "shimmer", + "sheryl", + "sienna", + "shitshit", + "skillet", + "seaman", + "sooners1", + "solaris", + "smartass", + "pastor", + "pasta", + "pedros", + "pennywis", + "pfloyd", + "tobydog", + "thetruth", + "lethal", + "letme1n", + "leland", + "jenifer", + "mario66", + "micky", + "rocky2", + "rewq", + "ripped", + "reindeer", + "1128", + "1207", + "1104", + "1432", + "aprilia", + "allstate", + "alyson", + "bagels", + "basic", + "baggies", + "barb", + "barrage", + "greatest", + "gomez", + "guru", + "guard", + "72d5tn", + "606060", + "4wcqjn", + "caldwell", + "chance1", + "catalog", + "faust", + "film", + "flange", + "fran", + "fartman", + "geil", + "gbhcf2", + "fussball", + "glen", + "fuaqz4", + "gameboy", + "garnet", + "geneviev", + "rotary", + "seahawk", + "russel", + "saab", + "seal", + "samadams", + "devlt4", + "ditto", + "drevil", + "drinker", + "deuce", + "dipstick", + "donut", + "octopus", + "ottawa", + "losangel", + "loverman", + "porky", + "q9umoz", + "rapture", + "pump", + "pussy4me", + "university", + "triplex", + "ue8fpw", + "trent", + "trophy", + "turbos", + "troubles", + "agent", + "aaa340", + "churchil", + "crazyman", + "consult", + "creepy", + "craven", + "class", + "cutiepie", + "ddddd1", + "dejavu", + "cuxldv", + "nettie", + "nbvibt", + "nikon", + "niko", + "norwood", + "nascar1", + "nolan", + "bubba2", + "boobear", + "boogers", + "buff", + "bullwink", + "bully", + "bulldawg", + "horsemen", + "escalade", + "editor", + "eagle2", + "dynamic", + "ella", + "efyreg", + "edition", + "kidney", + "minnesot", + "mogwai", + "morrow", + "msnxbi", + "moonlight", + "mwq6qlzo", + "wars", + "werder", + "verygood", + "voodoo1", + "wheel", + "iiiiii1", + "159951", + "1624", + "1911a1", + "2244", + "bellagio", + "bedlam", + "belkin", + "bill1", + "woodrow", + "xirt2k", + "worship", + "??????", + "tanaka", + "swift", + "susieq", + "sundown", + "sukebe", + "tales", + "swifty", + "2fast4u", + "senate", + "sexe", + "sickness", + "shroom", + "shaun", + "seaweed", + "skeeter1", + "status", + "snicker", + "sorrow", + "spanky1", + "spook", + "patti", + "phaedrus", + "pilots", + "pinch", + "peddler", + "theo", + "thumper1", + "tessie", + "tiger7", + "tmjxn151", + "thematri", + "l2g7k3", + "letmeinn", + "lazy", + "jeffjeff", + "joan", + "johnmish", + "mantra", + "mariana", + "mike69", + "marshal", + "mart", + "mazda6", + "riptide", + "robots", + "rental", + "1107", + "1130", + "142857", + "11001001", + "1134", + "armored", + "alvin", + "alec", + "allnight", + "alright", + "amatuers", + "bartok", + "attorney", + "astral", + "baboon", + "bahamas", + "balls1", + "bassoon", + "hcleeb", + "happyman", + "granite", + "graywolf", + "golf1", + "gomets", + "8vjzus", + "7890", + "789123", + "8uiazp", + "5757", + "474jdvff", + "551scasi", + "50cent", + "camaro1", + "cherry1", + "chemist", + "final", + "firenze", + "fishtank", + "farrell", + "freewill", + "glendale", + "frogfrog", + "gerhardt", + "ganesh", + "same", + "scirocco", + "devilman", + "doodles", + "dinger", + "okinawa", + "olympic", + "nursing", + "orpheus", + "ohmygod", + "paisley", + "pallmall", + "null", + "lounge", + "lunchbox", + "manhatta", + "mahalo", + "mandarin", + "qwqwqw", + "qguvyt", + "pxx3eftp", + "president", + "rambler", + "puzzle", + "poppy1", + "turk182", + "trotter", + "vdlxuc", + "trish", + "tugboat", + "valiant", + "tracie", + "uwrl7c", + "chris123", + "coaster", + "cmfnpu", + "decimal", + "debbie1", + "dandy", + "daedalus", + "dede", + "natasha1", + "nissan1", + "nancy123", + "nevermin", + "napalm", + "newcastle", + "boats", + "branden", + "britt", + "bonghit", + "hester", + "ibxnsm", + "hhhhhh1", + "holger", + "durham", + "edmonton", + "erwin", + "equinox", + "dvader", + "kimmy", + "knulla", + "mustafa", + "monsoon", + "mistral", + "morgana", + "monica1", + "mojave", + "month", + "monterey", + "mrbill", + "vkaxcs", + "victor1", + "wacker", + "wendell", + "violator", + "vfdhif", + "wilson1", + "wavpzt", + "verena", + "wildstar", + "winter99", + "iqzzt580", + "jarrod", + "imback", + "1914", + "19741974", + "1monkey", + "1q2w3e4r5t", + "2500", + "2255", + "blank", + "bigshow", + "bigbucks", + "blackcoc", + "zoomer", + "wtcacq", + "wobble", + "xmen", + "xjznq5", + "yesterda", + "yhwnqc", + "zzzxxx", + "streak", + "393939", + "2fchbg", + "skinhead", + "skilled", + "shakira", + "shaft", + "shadow12", + "seaside", + "sigrid", + "sinful", + "silicon", + "smk7366", + "snapshot", + "sniper1", + "soccer11", + "staff", + "slap", + "smutty", + "peepers", + "pleasant", + "plokij", + "pdiddy", + "pimpdaddy", + "thrust", + "terran", + "topaz", + "today1", + "lionhear", + "littlema", + "lauren1", + "lincoln1", + "lgnu9d", + "laughing", + "juneau", + "methos", + "medina", + "merlyn", + "rogue1", + "romulus", + "redshift", + "1202", + "1469", + "12locked", + "arizona1", + "alfarome", + "al9agd", + "aol123", + "altec", + "apollo1", + "arse", + "baker1", + "bbb747", + "bach", + "axeman", + "astro1", + "hawthorn", + "goodfell", + "hawks1", + "gstring", + "hannes", + "8543852", + "868686", + "4ng62t", + "554uzpad", + "5401", + "567890", + "5232", + "catfood", + "frame", + "flow", + "fire1", + "flipflop", + "fffff1", + "fozzie", + "fluff", + "garrison", + "fzappa", + "furious", + "round", + "rustydog", + "sandberg", + "scarab", + "satin", + "ruger", + "samsung1", + "destin", + "diablo2", + "dreamer1", + "detectiv", + "dominick", + "doqvq3", + "drywall", + "paladin1", + "papabear", + "offroad", + "panasonic", + "nyyankee", + "luetdi", + "qcfmtz", + "pyf8ah", + "puddles", + "privacy", + "rainer", + "pussyeat", + "ralph1", + "princeto", + "trivia", + "trewq", + "tri5a3", + "advent", + "9898", + "agyvorc", + "clarkie", + "coach1", + "courier", + "contest", + "christo", + "corinna", + "chowder", + "concept", + "climbing", + "cyzkhw", + "davidb", + "dad2ownu", + "days", + "daredevi", + "de7mdf", + "nose", + "necklace", + "nazgul", + "booboo1", + "broad", + "bonzo", + "brenna", + "boot", + "butch1", + "huskers1", + "hgfdsa", + "hornyman", + "elmer", + "elektra", + "england1", + "elodie", + "kermit1", + "knife", + "kaboom", + "minute", + "modern", + "motherfucker", + "morten", + "mocha", + "monday1", + "morgoth", + "ward", + "weewee", + "weenie", + "walters", + "vorlon", + "website", + "wahoo", + "ilovegod", + "insider", + "jayman", + "1911", + "1dallas", + "1900", + "1ranger", + "201jedlz", + "2501", + "1qaz", + "bertram", + "bignuts", + "bigbad", + "beebee", + "billows", + "belize", + "bebe", + "wvj5np", + "wu4etd", + "yamaha1", + "wrinkle5", + "zebra1", + "yankee1", + "zoomzoom", + "9876543", + "311", + "?????", + "stjabn", + "tainted", + "3tmnej", + "shoot", + "skooter", + "skelter", + "sixteen", + "starlite", + "smack", + "spice1", + "stacey1", + "smithy", + "perrin", + "pollux", + "peternorth", + "pixie", + "paulina", + "piston", + "pick", + "poets", + "pine", + "toons", + "tooth", + "topspin", + "kugm7b", + "legends", + "jeepjeep", + "juliana", + "joystick", + "junkmail", + "jojojojo", + "jonboy", + "judge", + "midland", + "meteor", + "mccabe", + "matter", + "mayfair", + "meeting", + "merrill", + "raul", + "riches", + "reznor", + "rockrock", + "reboot", + "reject", + "robyn", + "renee1", + "roadway", + "rasta220", + "1411", + "1478963", + "1019", + "archery", + "allman", + "andyandy", + "barks", + "bagpuss", + "auckland", + "gooseman", + "hazmat", + "gucci", + "guns", + "grammy", + "happydog", + "greek", + "7kbe9d", + "7676", + "6bjvpe", + "5lyedn", + "5858", + "5291", + "charlie2", + "chas", + "c7lrwu", + "candys", + "chateau", + "ccccc1", + "cardinals", + "fear", + "fihdfv", + "fortune12", + "gocats", + "gaelic", + "fwsadn", + "godboy", + "gldmeo", + "fx3tuo", + "fubar1", + "garland", + "generals", + "gforce", + "rxmtkp", + "rulz", + "sairam", + "dunhill", + "division", + "dogggg", + "detect", + "details", + "doll", + "drinks", + "ozlq6qwm", + "ov3ajy", + "lockout", + "makayla", + "macgyver", + "mallorca", + "loves", + "prima", + "pvjegu", + "qhxbij", + "raphael", + "prelude1", + "totoro", + "tusymo", + "trousers", + "tunnel", + "valeria", + "tulane", + "turtle1", + "tracy1", + "aerosmit", + "abbey1", + "address", + "clticic", + "clueless", + "cooper1", + "comets", + "collect", + "corbin", + "delpiero", + "derick", + "cyprus", + "dante1", + "dave1", + "nounours", + "neal", + "nexus6", + "nero", + "nogard", + "norfolk", + "brent1", + "booyah", + "bootleg", + "buckaroo", + "bulls23", + "bulls1", + "booper", + "heretic", + "icecube", + "hellno", + "hounds", + "honeydew", + "hooters1", + "hoes", + "howie", + "hevnm4", + "hugohugo", + "eighty", + "epson", + "evangeli", + "eeeee1", + "eyphed", +} diff --git a/internal/password/hash.go b/internal/password/hash.go new file mode 100644 index 0000000..27e78c9 --- /dev/null +++ b/internal/password/hash.go @@ -0,0 +1,30 @@ +package password + +import ( + "errors" + + "golang.org/x/crypto/bcrypt" +) + +func Hash(plaintextPassword string) (string, error) { + hashedPassword, err := bcrypt.GenerateFromPassword([]byte(plaintextPassword), 12) + if err != nil { + return "", err + } + + return string(hashedPassword), nil +} + +func Matches(plaintextPassword, hashedPassword string) (bool, error) { + err := bcrypt.CompareHashAndPassword([]byte(hashedPassword), []byte(plaintextPassword)) + if err != nil { + switch { + case errors.Is(err, bcrypt.ErrMismatchedHashAndPassword): + return false, nil + default: + return false, err + } + } + + return true, nil +} diff --git a/internal/request/forms.go b/internal/request/forms.go new file mode 100644 index 0000000..4ff07b5 --- /dev/null +++ b/internal/request/forms.go @@ -0,0 +1,46 @@ +package request + +import ( + "errors" + "net/http" + "net/url" + + "github.com/go-playground/form/v4" +) + +var decoder = form.NewDecoder() + +func DecodeForm(r *http.Request, dst any) error { + err := r.ParseForm() + if err != nil { + return err + } + + return decodeURLValues(r.Form, dst) +} + +func DecodePostForm(r *http.Request, dst any) error { + err := r.ParseForm() + if err != nil { + return err + } + + return decodeURLValues(r.PostForm, dst) +} + +func DecodeQueryString(r *http.Request, dst any) error { + return decodeURLValues(r.URL.Query(), dst) +} + +func decodeURLValues(v url.Values, dst any) error { + err := decoder.Decode(dst, v) + if err != nil { + var invalidDecoderError *form.InvalidDecoderError + + if errors.As(err, &invalidDecoderError) { + panic(err) + } + } + + return err +} diff --git a/internal/request/json.go b/internal/request/json.go new file mode 100644 index 0000000..49eeaca --- /dev/null +++ b/internal/request/json.go @@ -0,0 +1,73 @@ +package request + +import ( + "encoding/json" + "errors" + "fmt" + "io" + "net/http" + "strings" +) + +func DecodeJSON(w http.ResponseWriter, r *http.Request, dst interface{}) error { + return decodeJSON(w, r, dst, false) +} + +func DecodeJSONStrict(w http.ResponseWriter, r *http.Request, dst interface{}) error { + return decodeJSON(w, r, dst, true) +} + +func decodeJSON(w http.ResponseWriter, r *http.Request, dst interface{}, disallowUnknownFields bool) error { + maxBytes := 1_048_576 + r.Body = http.MaxBytesReader(w, r.Body, int64(maxBytes)) + + dec := json.NewDecoder(r.Body) + + if disallowUnknownFields { + dec.DisallowUnknownFields() + } + + err := dec.Decode(dst) + if err != nil { + var syntaxError *json.SyntaxError + var unmarshalTypeError *json.UnmarshalTypeError + var invalidUnmarshalError *json.InvalidUnmarshalError + + switch { + case errors.As(err, &syntaxError): + return fmt.Errorf("body contains badly-formed JSON (at character %d)", syntaxError.Offset) + + case errors.Is(err, io.ErrUnexpectedEOF): + return errors.New("body contains badly-formed JSON") + + case errors.As(err, &unmarshalTypeError): + if unmarshalTypeError.Field != "" { + return fmt.Errorf("body contains incorrect JSON type for field %q", unmarshalTypeError.Field) + } + return fmt.Errorf("body contains incorrect JSON type (at character %d)", unmarshalTypeError.Offset) + + case errors.Is(err, io.EOF): + return errors.New("body must not be empty") + + case strings.HasPrefix(err.Error(), "json: unknown field "): + fieldName := strings.TrimPrefix(err.Error(), "json: unknown field ") + return fmt.Errorf("body contains unknown key %s", fieldName) + + case err.Error() == "http: request body too large": + return fmt.Errorf("body must not be larger than %d bytes", maxBytes) + + case errors.As(err, &invalidUnmarshalError): + panic(err) + + default: + return err + } + } + + err = dec.Decode(&struct{}{}) + if !errors.Is(err, io.EOF) { + return errors.New("body must only contain a single JSON value") + } + + return nil +} diff --git a/internal/response/json.go b/internal/response/json.go new file mode 100644 index 0000000..2deac8c --- /dev/null +++ b/internal/response/json.go @@ -0,0 +1,29 @@ +package response + +import ( + "encoding/json" + "net/http" +) + +func JSON(w http.ResponseWriter, status int, data any) error { + return JSONWithHeaders(w, status, data, nil) +} + +func JSONWithHeaders(w http.ResponseWriter, status int, data any, headers http.Header) error { + js, err := json.MarshalIndent(data, "", "\t") + if err != nil { + return err + } + + js = append(js, '\n') + + for key, value := range headers { + w.Header()[key] = value + } + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(status) + w.Write(js) + + return nil +} diff --git a/internal/response/metrics.go b/internal/response/metrics.go new file mode 100644 index 0000000..4daadbe --- /dev/null +++ b/internal/response/metrics.go @@ -0,0 +1,42 @@ +package response + +import "net/http" + +type MetricsResponseWriter struct { + StatusCode int + BytesCount int + headerWritten bool + wrapped http.ResponseWriter +} + +func NewMetricsResponseWriter(w http.ResponseWriter) *MetricsResponseWriter { + return &MetricsResponseWriter{ + StatusCode: http.StatusOK, + wrapped: w, + } +} + +func (mw *MetricsResponseWriter) Header() http.Header { + return mw.wrapped.Header() +} + +func (mw *MetricsResponseWriter) WriteHeader(statusCode int) { + mw.wrapped.WriteHeader(statusCode) + + if !mw.headerWritten { + mw.StatusCode = statusCode + mw.headerWritten = true + } +} + +func (mw *MetricsResponseWriter) Write(b []byte) (int, error) { + mw.headerWritten = true + + n, err := mw.wrapped.Write(b) + mw.BytesCount += n + return n, err +} + +func (mw *MetricsResponseWriter) Unwrap() http.ResponseWriter { + return mw.wrapped +} diff --git a/internal/response/templates.go b/internal/response/templates.go new file mode 100644 index 0000000..355c264 --- /dev/null +++ b/internal/response/templates.go @@ -0,0 +1,96 @@ +package response + +import ( + "bytes" + "fmt" + "html/template" + "net/http" + + "brainminder.speedtech.it/assets" + "brainminder.speedtech.it/internal/funcs" +) + +func HXFragment(fullBuf *bytes.Buffer, pagePaths []string, templateName string, data any) error { + var err error + var buf *bytes.Buffer + buf, err = Fragment(pagePaths, templateName, data) + fullBuf.Write(buf.Bytes()) + return err +} + +func HXFragmentOOB(fullBuf *bytes.Buffer, pagePaths []string, templateName string, data any, div_id string) error { + var err error + var buf *bytes.Buffer + fullBuf.WriteString(fmt.Sprintf("
    ", div_id)) + buf, err = Fragment(pagePaths, templateName, data) + fullBuf.Write(buf.Bytes()) + fullBuf.WriteString("
    ") + return err +} + +func Fragment(pagePaths []string, templateName string, data any) (*bytes.Buffer, error) { + for i := range pagePaths { + pagePaths[i] = "templates/" + pagePaths[i] + } + + buf := new(bytes.Buffer) + + ts, err := template.New("").Funcs(funcs.TemplateFuncs).ParseFS(assets.EmbeddedFiles, pagePaths...) + if err != nil { + return buf, err + } + + err = ts.ExecuteTemplate(buf, templateName, data) + if err != nil { + return buf, err + } + + return buf, err +} + +func Page(w http.ResponseWriter, status int, data any, pagePaths []string, templateNames ...string) error { + templateName := "base" + + if len(templateNames) > 0 { + templateName = templateNames[0] + } + return PageWithHeaders(w, status, data, nil, pagePaths, templateName) +} + +func PageWithHeaders(w http.ResponseWriter, status int, data any, headers http.Header, pagePaths []string, templateName string) error { + templateFile := templateName + ".tmpl" + pagePaths = append(pagePaths, templateFile, "partials/sidebar.tmpl", "partials/nav.tmpl", "partials/footer.tmpl", "partials/types-list.tmpl", "partials/notebooks-list.tmpl") + + return NamedTemplateWithHeaders(w, status, data, headers, templateName, pagePaths) +} + +func NamedTemplate(w http.ResponseWriter, status int, data any, templateName string, pagePaths []string) error { + return NamedTemplateWithHeaders(w, status, data, nil, templateName, pagePaths) +} + +func NamedTemplateWithHeaders(w http.ResponseWriter, status int, data any, headers http.Header, templateName string, pagePaths []string) error { + for i := range pagePaths { + pagePaths[i] = "templates/" + pagePaths[i] + } + + ts, err := template.New("").Funcs(funcs.TemplateFuncs).ParseFS(assets.EmbeddedFiles, pagePaths...) + if err != nil { + return err + } + + buf := new(bytes.Buffer) + + err = ts.ExecuteTemplate(buf, templateName, data) + if err != nil { + return err + } + + for key, value := range headers { + w.Header()[key] = value + } + + w.WriteHeader(status) + buf.WriteTo(w) + + return nil +} diff --git a/internal/smtp/mailer.go b/internal/smtp/mailer.go new file mode 100644 index 0000000..3d538d5 --- /dev/null +++ b/internal/smtp/mailer.go @@ -0,0 +1,102 @@ +package smtp + +import ( + "bytes" + "time" + + "brainminder.speedtech.it/assets" + "brainminder.speedtech.it/internal/funcs" + + "github.com/wneessen/go-mail" + + htmlTemplate "html/template" + textTemplate "text/template" +) + +const defaultTimeout = 10 * time.Second + +type Mailer struct { + client mail.Client + from string +} + +func NewMailer(host string, port int, username, password, from string) (*Mailer, error) { + client, err := mail.NewClient(host, mail.WithTimeout(defaultTimeout), mail.WithSMTPAuth(mail.SMTPAuthLogin), mail.WithPort(port), mail.WithUsername(username), mail.WithPassword(password)) + if err != nil { + return nil, err + } + + mailer := &Mailer{ + client: *client, + from: from, + } + + return mailer, nil +} + +func (m *Mailer) Send(recipient string, data any, patterns ...string) error { + for i := range patterns { + patterns[i] = "emails/" + patterns[i] + } + msg := mail.NewMsg() + + err := msg.To(recipient) + if err != nil { + return err + } + + err = msg.From(m.from) + if err != nil { + return err + } + + ts, err := textTemplate.New("").Funcs(funcs.TemplateFuncs).ParseFS(assets.EmbeddedFiles, patterns...) + if err != nil { + return err + } + + subject := new(bytes.Buffer) + err = ts.ExecuteTemplate(subject, "subject", data) + if err != nil { + return err + } + + msg.Subject(subject.String()) + + plainBody := new(bytes.Buffer) + err = ts.ExecuteTemplate(plainBody, "plainBody", data) + if err != nil { + return err + } + + msg.SetBodyString(mail.TypeTextPlain, plainBody.String()) + + if ts.Lookup("htmlBody") != nil { + ts, err := htmlTemplate.New("").Funcs(funcs.TemplateFuncs).ParseFS(assets.EmbeddedFiles, patterns...) + if err != nil { + return err + } + + htmlBody := new(bytes.Buffer) + err = ts.ExecuteTemplate(htmlBody, "htmlBody", data) + if err != nil { + return err + } + + msg.AddAlternativeString(mail.TypeTextHTML, htmlBody.String()) + } + + for i := 1; i <= 3; i++ { + err = m.client.DialAndSend(msg) + + if nil == err { + return nil + } + + if i != 3 { + time.Sleep(2 * time.Second) + } + } + + return err +} diff --git a/internal/token/token.go b/internal/token/token.go new file mode 100644 index 0000000..8f6171e --- /dev/null +++ b/internal/token/token.go @@ -0,0 +1,34 @@ +package token + +import ( + "crypto/rand" + "crypto/sha256" + "encoding/base32" + "encoding/hex" + "strings" +) + +func randomBytes(n int) ([]byte, error) { + b := make([]byte, n) + + _, err := rand.Read(b) + if err != nil { + return nil, err + } + + return b, nil +} + +func New() (string, error) { + b, err := randomBytes(16) + if err != nil { + return "", err + } + + return strings.ToLower(base32.StdEncoding.WithPadding(base32.NoPadding).EncodeToString(b)), nil +} + +func Hash(plaintext string) string { + hash := sha256.Sum256([]byte(plaintext)) + return hex.EncodeToString(hash[:]) +} diff --git a/internal/validator/helpers.go b/internal/validator/helpers.go new file mode 100644 index 0000000..242c0aa --- /dev/null +++ b/internal/validator/helpers.go @@ -0,0 +1,88 @@ +package validator + +import ( + "net/url" + "regexp" + "strings" + "unicode/utf8" + + "golang.org/x/exp/constraints" +) + +var ( + RgxEmail = regexp.MustCompile("^[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$") +) + +func NotBlank(value string) bool { + return strings.TrimSpace(value) != "" +} + +func MinRunes(value string, n int) bool { + return utf8.RuneCountInString(value) >= n +} + +func MaxRunes(value string, n int) bool { + return utf8.RuneCountInString(value) <= n +} + +func Between[T constraints.Ordered](value, min, max T) bool { + return value >= min && value <= max +} + +func Matches(value string, rx *regexp.Regexp) bool { + return rx.MatchString(value) +} + +func In[T comparable](value T, safelist ...T) bool { + for i := range safelist { + if value == safelist[i] { + return true + } + } + return false +} + +func AllIn[T comparable](values []T, safelist ...T) bool { + for i := range values { + if !In(values[i], safelist...) { + return false + } + } + return true +} + +func NotIn[T comparable](value T, blocklist ...T) bool { + for i := range blocklist { + if value == blocklist[i] { + return false + } + } + return true +} + +func NoDuplicates[T comparable](values []T) bool { + uniqueValues := make(map[T]bool) + + for _, value := range values { + uniqueValues[value] = true + } + + return len(values) == len(uniqueValues) +} + +func IsEmail(value string) bool { + if len(value) > 254 { + return false + } + + return RgxEmail.MatchString(value) +} + +func IsURL(value string) bool { + u, err := url.ParseRequestURI(value) + if err != nil { + return false + } + + return u.Scheme != "" && u.Host != "" +} diff --git a/internal/validator/validator.go b/internal/validator/validator.go new file mode 100644 index 0000000..f74daea --- /dev/null +++ b/internal/validator/validator.go @@ -0,0 +1,40 @@ +package validator + +type Validator struct { + Errors []string + FieldErrors map[string]string +} + +func (v Validator) HasErrors() bool { + return len(v.Errors) != 0 || len(v.FieldErrors) != 0 +} + +func (v *Validator) AddError(message string) { + if v.Errors == nil { + v.Errors = []string{} + } + + v.Errors = append(v.Errors, message) +} + +func (v *Validator) AddFieldError(key, message string) { + if v.FieldErrors == nil { + v.FieldErrors = map[string]string{} + } + + if _, exists := v.FieldErrors[key]; !exists { + v.FieldErrors[key] = message + } +} + +func (v *Validator) Check(ok bool, message string) { + if !ok { + v.AddError(message) + } +} + +func (v *Validator) CheckField(ok bool, key, message string) { + if !ok { + v.AddFieldError(key, message) + } +} diff --git a/internal/version/version.go b/internal/version/version.go new file mode 100644 index 0000000..dc75e9a --- /dev/null +++ b/internal/version/version.go @@ -0,0 +1,5 @@ +package version + +func Get() string { + return "0.0.1" +} diff --git a/models/base.go b/models/base.go new file mode 100644 index 0000000..c950ad6 --- /dev/null +++ b/models/base.go @@ -0,0 +1,32 @@ +package models + +import ( + "brainminder.speedtech.it/internal/database" + "github.com/yuin/goldmark" + highlighting "github.com/yuin/goldmark-highlighting" + "github.com/yuin/goldmark/extension" + "github.com/yuin/goldmark/renderer/html" +) + +type BaseModel struct { + DB *database.DB +} + +func (model *BaseModel) GetMarkdown() *goldmark.Markdown { + markdown := goldmark.New( + goldmark.WithRendererOptions( + html.WithXHTML(), + html.WithUnsafe(), + ), + goldmark.WithExtensions( + highlighting.Highlighting, + extension.NewLinkify( + extension.WithLinkifyAllowedProtocols([]string{ + "http:", + "https:", + }), + ), + ), + ) + return &markdown +} diff --git a/models/category.go b/models/category.go new file mode 100644 index 0000000..4b2ba9a --- /dev/null +++ b/models/category.go @@ -0,0 +1,131 @@ +package models + +import ( + "database/sql" + "errors" + "strconv" + + "brainminder.speedtech.it/internal/database" + "brainminder.speedtech.it/internal/funcs" + "github.com/jmoiron/sqlx" +) + +type CategoryModel struct { + DB *database.DB +} + +type Category struct { + Id int64 `db:"id"` + Name string `db:"name"` +} + +func (model *CategoryModel) One(id int) (*Category, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + var row Category + + query := `SELECT id, name FROM bm_category WHERE id = $1` + + err := model.DB.GetContext(ctx, &row, query, id) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return &row, true, err +} + +func (model *CategoryModel) All() ([]Category, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `SELECT id, name FROM bm_category ORDER BY name` + + var rows []Category + + err := model.DB.SelectContext(ctx, &rows, query) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return rows, true, err +} + +func (model *CategoryModel) Find(ids []int64) ([]Category, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query, args, _ := sqlx.In("SELECT id, name FROM bm_category WHERE id IN (?) ORDER BY name", ids) + query = model.DB.Rebind(query) + + var rows []Category + + err := model.DB.SelectContext(ctx, &rows, query, args) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return rows, true, err +} + +func (model *CategoryModel) AllAsOptions() []funcs.WidgetOption { + categories, _, _ := model.All() + var selectOptions []funcs.WidgetOption + for _, category := range categories { + selectOptions = append(selectOptions, funcs.WidgetOption{Key: strconv.FormatInt(category.Id, 10), Value: category.Name}) + } + return selectOptions +} + +func (model *CategoryModel) AllAsMap() map[string]string { + categories, _, _ := model.All() + var categories_map = make(map[string]string) + for _, category := range categories { + categories_map[strconv.FormatInt(category.Id, 10)] = category.Name + } + return categories_map +} + +func (model *CategoryModel) Delete(id int) (bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `DELETE FROM bm_category WHERE id = $1` + + _, err := model.DB.ExecContext(ctx, query, id) + if errors.Is(err, sql.ErrNoRows) { + return false, nil + } + + return true, err +} + +func (model *CategoryModel) Create(Category *Category) (int64, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `INSERT INTO bm_category (name) VALUES (:name)` + + result, err := model.DB.NamedExecContext(ctx, query, Category) + if err != nil { + return 0, err + } + + id, err := result.LastInsertId() + if err != nil { + return 0, err + } + + return id, err +} + +func (model *CategoryModel) Update(Category *Category) error { + ctx, cancel := database.GetContext() + defer cancel() + + query := `UPDATE bm_category SET name=:name WHERE id = :id` + + _, err := model.DB.NamedExecContext(ctx, query, Category) + + return err +} diff --git a/models/constructors.go b/models/constructors.go new file mode 100644 index 0000000..f581078 --- /dev/null +++ b/models/constructors.go @@ -0,0 +1,13 @@ +package models + +import ( + "brainminder.speedtech.it/internal/database" +) + +func NewQuicknoteModel(db *database.DB) *QuicknoteModel { + return &QuicknoteModel{BaseModel: &BaseModel{db}} +} + +func NewItemModel(db *database.DB) *ItemModel { + return &ItemModel{BaseModel: &BaseModel{db}} +} diff --git a/models/field.go b/models/field.go new file mode 100644 index 0000000..8cfef52 --- /dev/null +++ b/models/field.go @@ -0,0 +1,168 @@ +package models + +import ( + "database/sql" + "errors" + + "brainminder.speedtech.it/internal/database" +) + +type FieldModel struct { + DB *database.DB +} + +type Field struct { + Type_field_id int64 `db:"type_field_id"` + Widget_id int64 `db:"widget_id"` + Type_id int64 `db:"type_id"` + Widget string `db:"widget"` + Title string `db:"title"` + Position int `db:"position"` + Show_on_list int64 `db:"show_on_list"` + Show_on_view int64 `db:"show_on_view"` + Valid_values string `db:"valid_values"` + Ui_section string `db:"ui_section"` + Is_multiple int64 `db:"is_multiple"` + ToRemove int64 +} + +type FieldValue struct { + Type_field_id int64 `db:"type_field_id"` + Value string `db:"value"` + Title string `db:"title"` + Widget string `db:"widget"` + Number int64 `db:"number"` + Counter int `db:"counter"` +} + +func (model *FieldModel) ByTypeSection(type_id int64) (map[string][]Field, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `SELECT btf.id AS type_field_id, btf.widget_id, btf.type_id, bw.widget, btf.title, btf.position, + btf.valid_values, btf.show_on_list, btf.show_on_view, btf.ui_section, btf.is_multiple + FROM bm_type_fields btf INNER JOIN bm_widgets bw ON btf.widget_id=bw.id WHERE btf.type_id=$1 ORDER BY btf.position` + + var rows []Field + rowsBySection := make(map[string][]Field) + + err := model.DB.SelectContext(ctx, &rows, query, type_id) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + for _, row := range rows { + if value, found := rowsBySection[row.Ui_section]; found { + rowsBySection[row.Ui_section] = append(value, row) + } else { + rowsBySection[row.Ui_section] = []Field{row} + } + } + + return rowsBySection, true, err +} + +func (model *FieldModel) ByType(type_id int64) ([]Field, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `SELECT btf.id AS type_field_id, btf.widget_id, btf.type_id, bw.widget, btf.title, btf.position, + btf.valid_values, btf.show_on_list, btf.show_on_view, btf.ui_section, btf.is_multiple + FROM bm_type_fields btf INNER JOIN bm_widgets bw ON btf.widget_id=bw.id WHERE btf.type_id=$1 ORDER BY btf.position` + + var rows []Field + + err := model.DB.SelectContext(ctx, &rows, query, type_id) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return rows, true, err +} + +func (model *FieldModel) ByTypeOnList(type_id int64) ([]Field, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `SELECT btf.id AS type_field_id, btf.widget_id, btf.type_id, bw.widget, btf.title, btf.position, + btf.valid_values, btf.show_on_list, btf.show_on_view, btf.ui_section, btf.is_multiple + FROM bm_type_fields btf INNER JOIN bm_widgets bw ON btf.widget_id=bw.id WHERE btf.show_on_list=1 AND btf.type_id=$1 ORDER BY btf.position` + + var rows []Field + + err := model.DB.SelectContext(ctx, &rows, query, type_id) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return rows, true, err +} + +func (model *FieldModel) SaveValues(item_id int64, type_field_id int64, values map[int]string) bool { + ctx, cancel := database.GetContext() + defer cancel() + + qy_delete := `DELETE FROM bm_item_fields WHERE item_id=? AND type_field_id=?` + + _, err := model.DB.ExecContext(ctx, qy_delete, item_id, type_field_id) + if errors.Is(err, sql.ErrNoRows) { + return false + } + + qy_insert := `INSERT INTO bm_item_fields (item_id, type_field_id, counter, value) VALUES(?, ?, ?, ?)` + + for counter, value := range values { + model.DB.MustExecContext(ctx, qy_insert, item_id, type_field_id, counter, value) + } + + return true +} + +func (model *FieldModel) GetFieldValues(item_id int64, type_field_id int64) map[int]string { + ctx, cancel := database.GetContext() + defer cancel() + + rows, _ := model.DB.QueryContext(ctx, "SELECT counter, value FROM bm_item_fields WHERE item_id=? AND type_field_id=?", item_id, type_field_id) + + values := make(map[int]string) + + for rows.Next() { + var counter int + var value string + rows.Scan(&counter, &value) + + values[counter] = value + } + + return values +} + +func (model *FieldModel) GetFieldsValues(item_id int64) []FieldValue { + ctx, cancel := database.GetContext() + defer cancel() + + var values []FieldValue + q := `SELECT bw.widget, btf.title, bif.type_field_id, bif.value, bif.counter FROM bm_item_fields bif + INNER JOIN bm_type_fields btf on btf.id=bif.type_field_id + INNER JOIN bm_widgets bw on bw.id=btf.widget_id + WHERE bif.item_id=$1` + model.DB.SelectContext(ctx, &values, q, item_id) + + return values +} + +func (model *FieldModel) GetFieldsValuesAsMap(item_id int64) map[int64]map[int]string { + values := model.GetFieldsValues(item_id) + + values_map := make(map[int64]map[int]string) + + for _, item_value := range values { + _, found := values_map[item_value.Type_field_id] + if !found { + values_map[item_value.Type_field_id] = make(map[int]string) + } + values_map[item_value.Type_field_id][item_value.Counter] = item_value.Value + } + + return values_map +} diff --git a/models/item.go b/models/item.go new file mode 100644 index 0000000..1507ab3 --- /dev/null +++ b/models/item.go @@ -0,0 +1,470 @@ +package models + +import ( + "bytes" + "database/sql" + "errors" + "strconv" + "strings" + + "brainminder.speedtech.it/internal/database" +) + +type Item struct { + Id int64 `db:"id"` + Title string `db:"title"` + Summary string `db:"summary"` + Summary_rendered string `db:"summary_rendered"` + Description string `db:"description"` + Description_rendered string `db:"description_rendered"` + Active int `db:"active"` + Tags string `db:"tags"` + Type_id int64 `db:"type_id"` + Categories string `db:"categories"` + Notebooks string `db:"notebooks"` + Crypted int `db:"crypted"` + Hidden int `db:"hidden"` + On_dashboard int `db:"on_dashboard"` + On_dashboard_position int `db:"on_dashboard_position"` + Type_title string `db:"type_title"` + Type_icon string `db:"type_icon"` + Type_show_summary int `db:"type_show_summary"` + Type_show_description int `db:"type_show_description"` + FieldsOnList []Field + FieldsValues []FieldValue + FieldsValuesMap map[int64]map[int]string +} + +type ItemRelation struct { + Item_id int64 `db:"item_id"` + Related_item_id int64 `db:"related_item_id"` + Relation_type string `db:"relation_type"` + Title string `db:"title"` + Categories string `db:"categories"` + Tags string `db:"tags"` + Type_title string `db:"type_title"` + Type_icon string `db:"type_icon"` +} + +type ItemModel struct { + *BaseModel +} + +func (model *ItemModel) One(id int64) (*Item, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + var row Item + + query := `SELECT bmi.*, bmt.title AS type_title, bmt.icon AS type_icon, bmt.show_summary AS type_show_summary, + bmt.show_description AS type_show_description FROM bm_item bmi + INNER JOIN bm_type bmt ON bmi.type_id=bmt.id WHERE bmi.id = $1` + + err := model.DB.GetContext(ctx, &row, query, id) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return &row, true, err +} + +func (model *ItemModel) Delete(id int) (bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + _, err := model.DB.ExecContext(ctx, `DELETE FROM bm_item WHERE id = $1`, id) + if errors.Is(err, sql.ErrNoRows) { + return false, nil + } + + _, err = model.DB.ExecContext(ctx, `DELETE FROM bm_item_relations WHERE id = $1 OR related_item_id=$1`, id) + if errors.Is(err, sql.ErrNoRows) { + return false, nil + } + + _, err = model.DB.ExecContext(ctx, `DELETE FROM bm_item_fields WHERE item_id = $1`, id) + if errors.Is(err, sql.ErrNoRows) { + return false, nil + } + + _, err = model.DB.ExecContext(ctx, `DELETE FROM bm_item_keywords WHERE item_id = $1`, id) + if errors.Is(err, sql.ErrNoRows) { + return false, nil + } + + return true, err +} + +func (model *ItemModel) Search(searchText string, criteria map[string]any) ([]Item, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + var params []interface{} + var conditions []string + var cond string + + var conditions_criteria []string + var cond_criteria string + + query := `SELECT DISTINCT bmi.*, bmt.title AS type_title, bmt.icon AS type_icon FROM bm_item bmi + INNER JOIN bm_type bmt ON bmi.type_id=bmt.id + INNER JOIN bm_item_keywords bit ON bit.item_id=bmi.id ` + + for field, value := range criteria { + switch field { + case "notebook_id": + if value != nil { + valint := value.(int64) + if valint > 0 { + valstr := "|" + strconv.FormatInt(valint, 10) + "|" + params = append(params, valstr) + conditions_criteria = append(conditions_criteria, "INSTR(bmi.notebooks, ?) > 0 ") + } + } + } + } + + if len(searchText) > 0 { + params = append(params, strings.ToLower(searchText)) + conditions = append(conditions, "bit.keyword = ? ") + } + + for _, s := range strings.Split(searchText, " ") { + s = strings.ToLower(s) + if len(s) > 0 { + params = append(params, s) + conditions = append(conditions, "bit.keyword = ? ") + } + } + + for _, condition := range conditions { + if len(cond) > 0 { + cond = cond + " OR " + } + cond = cond + condition + } + + for _, condition := range conditions_criteria { + if len(cond_criteria) > 0 { + cond_criteria = cond_criteria + " AND " + } + cond_criteria = cond_criteria + condition + } + + len_cond := len(cond) + len_cond_criteria := len(cond_criteria) + + if len_cond_criteria > 0 || len_cond > 0 { + query = query + "WHERE " + } + + if len_cond_criteria > 0 { + query = query + cond_criteria + if len_cond > 0 { + query = query + " AND (" + cond + ")" + } + } else { + if len_cond > 0 { + query = query + " (" + cond + ")" + } + } + + query = query + ` ORDER BY bmi.title` + + var rows []Item + + err := model.DB.SelectContext(ctx, &rows, query, params...) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return rows, true, err + +} + +func (model *ItemModel) Find(criteria map[string]any, offset int64) ([]Item, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + var params []interface{} + var conditions []string + var cond string + query := `SELECT DISTINCT bmi.*, bmt.title AS type_title, bmt.icon AS type_icon FROM bm_item bmi + INNER JOIN bm_type bmt ON bmi.type_id=bmt.id ` + + for field, value := range criteria { + switch field { + case "Title": + valstr := value.(string) + if len(valstr) > 0 { + params = append(params, valstr) + conditions = append(conditions, "bmi.title LIKE '%' || ? || '%'") + } + case "Tags": + valstr := value.(string) + if len(valstr) > 0 { + params = append(params, valstr) + conditions = append(conditions, "bmi.tags LIKE '%' || ? || '%'") + } + case "type_id": + valint := value.(int64) + if valint > 0 { + params = append(params, valint) + conditions = append(conditions, "bmi.type_id=?") + } + case "notebook_id": + if value != nil { + valint := value.(int64) + if valint > 0 { + valstr := "|" + strconv.FormatInt(valint, 10) + "|" + params = append(params, valstr) + conditions = append(conditions, "INSTR(bmi.notebooks, ?) > 0") + } + } + case "category_id": + if value != nil { + valint := value.(int64) + if valint > 0 { + valstr := "|" + strconv.FormatInt(valint, 10) + "|" + params = append(params, valstr) + conditions = append(conditions, "INSTR(bmi.categories, ?) > 0") + } + } + case "On_dashboard": + valint := value.(int) + if valint > 0 { + params = append(params, valint) + conditions = append(conditions, "bmi.on_dashboard=?") + } + } + } + + for _, condition := range conditions { + if len(cond) > 0 { + cond = cond + " AND " + } + cond = cond + condition + } + + if len(cond) > 0 { + query = query + "WHERE " + cond + " " + } + + query = query + ` ORDER BY bmi.title` + + params = append(params, offset) + query = query + ` LIMIT 10 OFFSET ?` + + var rows []Item + + err := model.DB.SelectContext(ctx, &rows, query, params...) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return rows, true, err +} + +func (model *ItemModel) Create(Item *Item) (int64, error) { + ctx, cancel := database.GetContext() + defer cancel() + + markdown := *model.GetMarkdown() + + var bufSummary bytes.Buffer + markdown.Convert([]byte(Item.Summary), &bufSummary) + Item.Summary_rendered = bufSummary.String() + + var bufDescription bytes.Buffer + markdown.Convert([]byte(Item.Description), &bufDescription) + Item.Description_rendered = bufDescription.String() + + query := `INSERT INTO bm_item (type_id, title, summary, summary_rendered, description, description_rendered, on_dashboard, tags, notebooks, categories) + VALUES (:type_id, :title, :summary, :summary_rendered, :description, :description_rendered, :on_dashboard, :tags, :notebooks, :categories)` + + result, err := model.DB.NamedExecContext(ctx, query, Item) + if err != nil { + return 0, err + } + + id, err := result.LastInsertId() + if err != nil { + return 0, err + } + + return id, err +} + +func (model *ItemModel) Update(Item *Item) error { + ctx, cancel := database.GetContext() + defer cancel() + + markdown := *model.GetMarkdown() + + var bufSummary bytes.Buffer + markdown.Convert([]byte(Item.Summary), &bufSummary) + Item.Summary_rendered = bufSummary.String() + + var bufDescription bytes.Buffer + markdown.Convert([]byte(Item.Description), &bufDescription) + Item.Description_rendered = bufDescription.String() + + query := `UPDATE bm_item SET title=:title, type_id=:type_id, summary=:summary, summary_rendered=:summary_rendered, + description=:description, description_rendered=:description_rendered, tags=:tags, on_dashboard=:on_dashboard, + categories=:categories, notebooks =:notebooks WHERE id = :id` + _, err := model.DB.NamedExecContext(ctx, query, Item) + + if err != nil { + return err + } + + return err +} + +func (model *ItemModel) AddToDashboard(id int64) error { + ctx, cancel := database.GetContext() + defer cancel() + + query := `UPDATE bm_item SET on_dashboard=1 WHERE id = :id` + _, err := model.DB.ExecContext(ctx, query, id) + + if err != nil { + return err + } + + return err +} + +func (model *ItemModel) RemoveFromDashboard(id int64) error { + ctx, cancel := database.GetContext() + defer cancel() + + query := `UPDATE bm_item SET on_dashboard=0 WHERE id = :id` + _, err := model.DB.ExecContext(ctx, query, id) + + if err != nil { + return err + } + + return err +} + +func (model *ItemModel) SaveKeywords(Item *Item, fields *[]Field, fieldsValues map[int64]map[int]string) error { + ctx, cancel := database.GetContext() + defer cancel() + + var keywords []string + keywords = append(keywords, Item.Type_title) + + var categories_int []int64 + categories_str := strings.Split(strings.Trim(Item.Categories, "|"), "|") + for _, category_str := range categories_str { + category_int, _ := strconv.ParseInt(category_str, 10, 64) + categories_int = append(categories_int, category_int) + } + + categoryModel := &CategoryModel{DB: model.DB} + categories, _, _ := categoryModel.Find(categories_int) + for _, category := range categories { + keywords = append(keywords, category.Name) + } + + keywords = append(keywords, strings.Split(Item.Tags, ",")...) + keywords = append(keywords, strings.Split(Item.Title, " ")...) + + for _, field := range *fields { + if field.Widget != "url" { + values, found := fieldsValues[field.Type_field_id] + if found { + for _, value := range values { + keywords = append(keywords, value) + } + } + } + } + + query := `DELETE FROM bm_item_keywords WHERE item_id = $1` + _, err := model.DB.ExecContext(ctx, query, Item.Id) + + if err != nil { + return err + } + + stmt, err := model.DB.Prepare(`INSERT INTO bm_item_keywords (item_id, keyword) VALUES($1, $2)`) + for _, keyword := range keywords { + keyword = strings.ToLower(strings.TrimSpace(keyword)) + if len(keyword) > 1 { + _, err = stmt.ExecContext(ctx, Item.Id, keyword) + } + + if err != nil { + return err + } + } + + return nil +} + +func (model *ItemModel) AddRelation(id int64, related_id int64, relation_type string) error { + ctx, cancel := database.GetContext() + defer cancel() + + query := `INSERT INTO bm_item_relations (item_id, related_item_id, relation_type) VALUES($1, $2, $3)` + _, err := model.DB.ExecContext(ctx, query, id, related_id, relation_type) + + if err != nil { + return err + } + return nil +} + +func (model *ItemModel) UpdateRelation(id int64, related_id int64, relation_type string) error { + ctx, cancel := database.GetContext() + defer cancel() + + query := `UPDATE bm_item_relations SET relation_type=$1 WHERE item_id=$2 AND related_item_id=$3` + _, err := model.DB.ExecContext(ctx, query, relation_type, id, related_id) + + if err != nil { + return err + } + return nil +} + +func (model *ItemModel) DeleteRelation(id int64, related_id int64) error { + ctx, cancel := database.GetContext() + defer cancel() + + query := `DELETE FROM bm_item_relations WHERE item_id=$1 AND related_item_id=$2` + _, err := model.DB.ExecContext(ctx, query, id, related_id) + + if err != nil { + return err + } + return nil +} + +func (model *ItemModel) GetRelations(id int64) ([]ItemRelation, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `SELECT bir.item_id, bir.related_item_id, bmi.title, bmi.categories, bmi.tags, bmt.title AS type_title, + bmt.icon AS type_icon, bir.relation_type FROM bm_item bmi + INNER JOIN bm_type bmt ON bmi.type_id=bmt.id + INNER JOIN bm_item_relations bir ON bir.related_item_id=bmi.id WHERE bir.item_id=$1 + UNION + SELECT bir.item_id, bir.related_item_id, bmi.title, bmi.categories, bmi.tags, bmt.title AS type_title, + bmt.icon AS type_icon, bir.relation_type FROM bm_item bmi + INNER JOIN bm_type bmt ON bmi.type_id=bmt.id + INNER JOIN bm_item_relations bir ON bir.item_id=bmi.id WHERE bir.related_item_id=$1 + ` + + var rows []ItemRelation + + err := model.DB.SelectContext(ctx, &rows, query, id) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return rows, true, err +} diff --git a/models/notebook.go b/models/notebook.go new file mode 100644 index 0000000..53d136b --- /dev/null +++ b/models/notebook.go @@ -0,0 +1,152 @@ +package models + +import ( + "database/sql" + "errors" + "strconv" + + "brainminder.speedtech.it/internal/database" + "brainminder.speedtech.it/internal/funcs" +) + +type NotebookModel struct { + DB *database.DB +} + +type Notebook struct { + Id int64 `db:"id"` + Title string `db:"title"` + Icon string `db:"icon"` + Description string `db:"description"` + Hidden int `db:"hidden"` +} + +func (model *NotebookModel) One(id int64) (*Notebook, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + var row Notebook + + query := `SELECT * FROM bm_notebook WHERE id = $1` + + err := model.DB.GetContext(ctx, &row, query, id) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return &row, true, err +} + +func (model *NotebookModel) All() ([]Notebook, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `SELECT * FROM bm_notebook ORDER BY title` + + var rows []Notebook + + err := model.DB.SelectContext(ctx, &rows, query) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return rows, true, err +} + +func (model *NotebookModel) AllAsOptions(withAll bool) []funcs.WidgetOption { + Notebooks, _, _ := model.All() + var selectOptions []funcs.WidgetOption + if withAll { + selectOptions = append(selectOptions, funcs.WidgetOption{Key: "0", Value: "- All -"}) + } + for _, Notebook := range Notebooks { + selectOptions = append(selectOptions, funcs.WidgetOption{Key: strconv.FormatInt(Notebook.Id, 10), Value: Notebook.Title}) + } + return selectOptions +} + +func (model *NotebookModel) Find(criteria map[string]any) ([]Notebook, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + var params []interface{} + var conditions []string + var cond string + query := "SELECT bmn.* FROM bm_notebook bmn " + + for field, value := range criteria { + switch field { + case "Title": + valstr := value.(string) + if len(valstr) > 0 { + params = append(params, valstr) + conditions = append(conditions, "bmn.title LIKE '%' || ? || '%'") + } + } + } + + for _, condition := range conditions { + if len(cond) > 0 { + cond = cond + " AND " + } + cond = cond + condition + } + + if len(cond) > 0 { + query = query + "WHERE " + cond + " " + } + query = query + `ORDER BY bmn.title` + + var rows []Notebook + + err := model.DB.SelectContext(ctx, &rows, query, params...) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return rows, true, err +} + +func (model *NotebookModel) Create(Notebook *Notebook) (int64, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `INSERT INTO bm_notebook (title, description, icon, hidden) VALUES (:title, :description, :icon, :hidden)` + + result, err := model.DB.NamedExecContext(ctx, query, Notebook) + if err != nil { + return 0, err + } + + id, err := result.LastInsertId() + if err != nil { + return 0, err + } + + return id, err +} + +func (model *NotebookModel) Update(Notebook *Notebook) error { + ctx, cancel := database.GetContext() + defer cancel() + + query := `UPDATE bm_notebook SET title=:title, icon=:icon, description=:description, hidden=:hidden WHERE id = :id` + + _, err := model.DB.NamedExecContext(ctx, query, Notebook) + + return err +} + +func (model *NotebookModel) Delete(id int64) (bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `DELETE FROM bm_notebook WHERE id = $1` + + _, err := model.DB.ExecContext(ctx, query, id) + if errors.Is(err, sql.ErrNoRows) { + return false, nil + } + + return true, err +} diff --git a/models/quicknote.go b/models/quicknote.go new file mode 100644 index 0000000..64fd931 --- /dev/null +++ b/models/quicknote.go @@ -0,0 +1,182 @@ +package models + +import ( + "bytes" + "database/sql" + "errors" + + "brainminder.speedtech.it/internal/database" +) + +type QuicknoteModel struct { + *BaseModel +} + +type Quicknote struct { + Id int64 `db:"id"` + Note string `db:"note"` + Note_rendered string `db:"note_rendered"` +} + +func (model *QuicknoteModel) One(id int64) (*Quicknote, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + var row Quicknote + + query := `SELECT * FROM bm_quicknote WHERE id = $1` + + err := model.DB.GetContext(ctx, &row, query, id) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return &row, true, err +} + +func (model *QuicknoteModel) All() ([]Quicknote, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `SELECT * FROM bm_quicknote ORDER BY note` + + var rows []Quicknote + + err := model.DB.SelectContext(ctx, &rows, query) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return rows, true, err +} + +func (model *QuicknoteModel) Count() int64 { + ctx, cancel := database.GetContext() + defer cancel() + + var count int64 + model.DB.GetContext(ctx, &count, "SELECT COUNT(*) FROM bm_quicknote") + + return count +} + +func (model *QuicknoteModel) AllQB(offset int64) ([]Quicknote, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `SELECT * FROM bm_quicknote ORDER BY id DESC LIMIT 10 OFFSET ?` + + var rows []Quicknote + + err := model.DB.SelectContext(ctx, &rows, query, offset) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + rowsLen := len(rows) + var reversedRows []Quicknote + + for i := range rows { + reversedRows = append(reversedRows, rows[rowsLen-i-1]) + } + + return reversedRows, true, err +} + +func (model *QuicknoteModel) Find(criteria map[string]any) ([]Quicknote, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + var params []interface{} + var conditions []string + var cond string + query := "SELECT bmq.* FROM bm_quicknote bmq " + + for field, value := range criteria { + switch field { + case "Note": + valstr := value.(string) + if len(valstr) > 0 { + params = append(params, valstr) + conditions = append(conditions, "bmq.note LIKE '%' || ? || '%'") + } + } + } + + for _, condition := range conditions { + if len(cond) > 0 { + cond = cond + " AND " + } + cond = cond + condition + } + + if len(cond) > 0 { + query = query + "WHERE " + cond + " " + } + query = query + `ORDER BY bmq.note` + + var rows []Quicknote + + err := model.DB.SelectContext(ctx, &rows, query, params...) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return rows, true, err +} + +func (model *QuicknoteModel) Create(Quicknote *Quicknote) (int64, error) { + ctx, cancel := database.GetContext() + defer cancel() + + markdown := *model.GetMarkdown() + + var bufNote bytes.Buffer + markdown.Convert([]byte(Quicknote.Note), &bufNote) + Quicknote.Note_rendered = bufNote.String() + + query := `INSERT INTO bm_quicknote (note, note_rendered) VALUES (:note, :note_rendered)` + + result, err := model.DB.NamedExecContext(ctx, query, Quicknote) + if err != nil { + return 0, err + } + + id, err := result.LastInsertId() + if err != nil { + return 0, err + } + + return id, err +} + +func (model *QuicknoteModel) Update(Quicknote *Quicknote) error { + ctx, cancel := database.GetContext() + defer cancel() + + markdown := *model.GetMarkdown() + + var bufNote bytes.Buffer + markdown.Convert([]byte(Quicknote.Note), &bufNote) + Quicknote.Note_rendered = bufNote.String() + + query := `UPDATE bm_quicknote SET note=:note, note_rendered=:note_rendered WHERE id = :id` + + _, err := model.DB.NamedExecContext(ctx, query, Quicknote) + + return err +} + +func (model *QuicknoteModel) Delete(id int64) (bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `DELETE FROM bm_quicknote WHERE id = $1` + + _, err := model.DB.ExecContext(ctx, query, id) + if errors.Is(err, sql.ErrNoRows) { + return false, nil + } + + return true, err +} diff --git a/models/type.go b/models/type.go new file mode 100644 index 0000000..267ff8b --- /dev/null +++ b/models/type.go @@ -0,0 +1,231 @@ +package models + +import ( + "database/sql" + "errors" + "net/http" + "strconv" + "strings" + + "brainminder.speedtech.it/internal/database" + "brainminder.speedtech.it/internal/funcs" +) + +type TypeModel struct { + DB *database.DB +} + +type Type struct { + Id int64 `db:"id"` + Title string `db:"title"` + Icon string `db:"icon"` + Description string `db:"description"` + Notebooks string `db:"notebooks"` + Show_summary int `db:"show_summary"` + Show_description int `db:"show_description"` + Sections string `db:"sections"` +} + +func (model *TypeModel) One(id int64) (*Type, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + var row Type + + query := `SELECT * FROM bm_type WHERE id = $1` + + err := model.DB.GetContext(ctx, &row, query, id) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return &row, true, err +} + +func (model *TypeModel) Find(criteria map[string]any) ([]Type, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + var params []interface{} + var conditions []string + var cond string + query := "SELECT DISTINCT bmt.* FROM bm_type bmt " + + for field, value := range criteria { + switch field { + case "Title": + valstr := value.(string) + if len(valstr) > 0 { + params = append(params, valstr) + conditions = append(conditions, "bmt.title LIKE '%' || ? || '%'") + } + case "notebook_id": + if value != nil { + valint := value.(int64) + if valint > 0 { + valstr := "|" + strconv.FormatInt(valint, 10) + "|" + params = append(params, valstr) + conditions = append(conditions, "INSTR(notebooks, ?) > 0") + } + } + } + } + + for _, condition := range conditions { + if len(cond) > 0 { + cond = cond + " AND " + } + cond = cond + condition + } + + if len(cond) > 0 { + query = query + "WHERE " + cond + " " + } + query = query + `ORDER BY bmt.title` + + var rows []Type + + err := model.DB.SelectContext(ctx, &rows, query, params...) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return rows, true, err +} + +func (model *TypeModel) FindAsOptions(criteria map[string]any) []funcs.WidgetOption { + Types, _, _ := model.Find(criteria) + var selectOptions []funcs.WidgetOption + for _, Type := range Types { + selectOptions = append(selectOptions, funcs.WidgetOption{Key: strconv.FormatInt(Type.Id, 10), Value: Type.Title}) + } + return selectOptions +} + +func (model *TypeModel) Delete(id int) (bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `DELETE FROM bm_type WHERE id = $1` + + _, err := model.DB.ExecContext(ctx, query, id) + if errors.Is(err, sql.ErrNoRows) { + return false, nil + } + + return true, err +} + +func (model *TypeModel) Create(Type *Type) (int64, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `INSERT INTO bm_type (title, icon, description, notebooks, sections, show_summary, show_description) + VALUES (:title, :icon, :description, :notebooks, :sections, :show_summary, :show_description)` + + result, err := model.DB.NamedExecContext(ctx, query, Type) + if err != nil { + return 0, err + } + + id, err := result.LastInsertId() + if err != nil { + return 0, err + } + + return id, err +} + +func (model *TypeModel) Update(Type *Type) error { + ctx, cancel := database.GetContext() + defer cancel() + + query := `UPDATE bm_type SET title=:title, icon=:icon, description=:description, notebooks=:notebooks, + sections=:sections, show_summary=:show_summary, show_description=:show_description WHERE id = :id` + + _, err := model.DB.NamedExecContext(ctx, query, Type) + + return err +} + +func (model *TypeModel) SaveField(type_field_id int64, field *Field) error { + ctx, cancel := database.GetContext() + defer cancel() + + query := `UPDATE bm_type_fields SET widget_id=:widget_id, title=:title, position=:position, + valid_values=:valid_values, show_on_list=:show_on_list, show_on_view=:show_on_view, ui_section=:ui_section, is_multiple=:is_multiple WHERE id =:type_field_id` + + _, err := model.DB.NamedExecContext(ctx, query, field) + + return err +} + +func (model *TypeModel) RemoveField(type_field_id int64) error { + ctx, cancel := database.GetContext() + defer cancel() + + //Check here if it is used + query := "DELETE FROM bm_type_fields WHERE id=$1" + + _, err := model.DB.ExecContext(ctx, query, type_field_id) + + return err +} + +func (model *TypeModel) AddField(bmField *Field) error { + ctx, cancel := database.GetContext() + defer cancel() + + query := `INSERT INTO bm_type_fields (type_id, widget_id, title, position, valid_values, show_on_list, show_on_view, ui_section, is_multiple) + VALUES (:type_id, :widget_id, :title, :position, :valid_values, :show_on_list, :show_on_view, :ui_section, :is_multiple)` + + _, err := model.DB.NamedExecContext(ctx, query, bmField) + + return err +} + +func (model *TypeModel) AddFields(TypeId int64, r *http.Request) { + fieldsNew := make(map[int64]Field) + for name, values := range r.PostForm { + s, found := strings.CutPrefix(name, "Fields-New-") + if found { + parts := strings.Split(s, "-") + if len(parts) == 2 { + counter, _ := strconv.ParseInt(parts[0], 10, 64) + type_field_attribute := parts[1] + + field, found := fieldsNew[counter] + if !found { + field := &Field{Type_id: TypeId} + fieldsNew[counter] = *field + } + field = fieldsNew[counter] + + switch type_field_attribute { + case "Widget_id": + field.Widget_id, _ = strconv.ParseInt(values[0], 10, 64) + case "Title": + field.Title = values[0] + case "Valid_values": + field.Valid_values = values[0] + case "Ui_section": + field.Ui_section = values[0] + case "Is_multiple": + field.Is_multiple, _ = strconv.ParseInt(values[0], 10, 64) + case "Show_on_list": + field.Show_on_list, _ = strconv.ParseInt(values[0], 10, 64) + case "Show_on_view": + field.Show_on_view, _ = strconv.ParseInt(values[0], 10, 64) + } + fieldsNew[counter] = field + } + } + } + + for _, field := range fieldsNew { + if len(field.Title) > 0 { + model.AddField(&field) + } + } + +} diff --git a/models/widget.go b/models/widget.go new file mode 100644 index 0000000..bb9c4ae --- /dev/null +++ b/models/widget.go @@ -0,0 +1,52 @@ +package models + +import ( + "database/sql" + "errors" + "strconv" + + "brainminder.speedtech.it/internal/database" + "brainminder.speedtech.it/internal/funcs" +) + +type WidgetModel struct { + DB *database.DB +} + +type Widget struct { + Id int64 `db:"id"` + Name string `db:"name"` + Widget string `db:"widget"` +} + +func (model *WidgetModel) All() ([]Widget, bool, error) { + ctx, cancel := database.GetContext() + defer cancel() + + query := `SELECT * FROM bm_widgets ORDER BY name` + + var rows []Widget + + err := model.DB.SelectContext(ctx, &rows, query) + if errors.Is(err, sql.ErrNoRows) { + return nil, false, nil + } + + return rows, true, err +} + +func (model *WidgetModel) AllAsOptions() []funcs.WidgetOption { + Widgets, _, _ := model.All() + var selectOptions []funcs.WidgetOption + for _, Widget := range Widgets { + selectOptions = append(selectOptions, funcs.WidgetOption{Key: strconv.FormatInt(Widget.Id, 10), Value: Widget.Name}) + } + return selectOptions +} + +func (model *WidgetModel) UISections() []funcs.WidgetOption { + var selectOptions []funcs.WidgetOption + selectOptions = append(selectOptions, funcs.WidgetOption{Key: "general", Value: "General"}) + selectOptions = append(selectOptions, funcs.WidgetOption{Key: "fields", Value: "Fields"}) + return selectOptions +}